Asp.Net实现无限分类生成表格的方法(后台自定义输出table)
本文实例讲述了Asp.Net实现无限分类生成表格的方法。分享给大家供大家参考,具体如下:
数据结构monitor_group
monitor_grp_id monitor_grp_name parent_id level childCount orderby
[int,自动递增] [nvarchar,notnull] [int,notnull] [int,notnull] [int,notnull] [int,null]
1 数据库服务器 0 1 2
2 应用服务器 0 1 2
3 系统服务器 0 1 0
4 WEB服务器 1 2 0
5 邮件服务器 1 2 0
6 代理服务器 2 2 0
7 Ftp服务器 2 2 0
\App_code\data.cs
usingSystem; usingSystem.Data; usingMySql.Data.MySqlClient; usingSystem.Configuration; usingSystem.Linq; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.HtmlControls; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; usingSystem.Xml.Linq; ///<summary> ///common的摘要说明 ///</summary> /// namespaceyihan { namespaceData { publicclassmyDataBind { publicmyDataBind() { // //TODO:在此处添加构造函数逻辑 // } publicstaticstringGetTree_monitor_grp_id(DataTabledt,intparent_id,refstringreturnString) { //绑定目录树 //dt:DataTable对象;parent_id:父ID;returnString:输出引用变量; DataRow[]dr=dt.Select("parent_id="+parent_id); intcurrentLenght=0;//当前次数 foreach(DataRowrowindr) { stringnodeImg="";//节点图片 stringtreeLineImg="";//树线 currentLenght+=1; if(Convert.ToInt32(row["childCount"])>0) {nodeImg="<imgsrc='images/treeExpand.gif'align='absmiddle'>";} else {nodeImg="<imgsrc='images/treeNode.gif'align='absmiddle'>";} for(vari=1;i<=Convert.ToInt32(row["level"]);i++) { //计算treeLineImg if(i==Convert.ToInt32(row["level"])) { if(currentLenght==dr.Length)//判断当前次数是否与本次dr总数量相等 {treeLineImg+="└";} else {treeLineImg+="├";} } else { treeLineImg+="│"; } } returnString+="<tr>\n"; returnString+="<tdalign='left'>"+treeLineImg+nodeImg+""+row["monitor_grp_name"]+"</td>\n"; returnString+="<tdalign='center'>"+row["level"]+"</td>\n"; returnString+="<tdalign='center'>"+row["childCount"]+"</td>\n"; returnString+="<tdalign='center'>"; returnString+="<ahref='class_add.aspx?monitor_grp_id="+row["monitor_grp_id"]+"'>添加子类</a> "; returnString+="<ahref='class_modi.aspx?monitor_grp_id="+row["monitor_grp_id"]+"'>修改</a> "; returnString+="<ahref='class_del.aspx?monitor_grp_id="+row["monitor_grp_id"]+"'onclick=\"javascript:{if(!confirm('确删要删除该类及其子类吗?'))returnfalse;}\">删除</a> "; returnString+="</td>\n"; returnString+="</tr>\n"; GetTree_monitor_grp_id(dt,Convert.ToInt32(row["monitor_grp_id"]),refreturnString); } returnreturnString; }//GetCatalogTreeEnd }//myDataBindEnd } }
class_list.aspx.cs
usingSystem; usingSystem.Collections; usingSystem.Configuration; usingSystem.Data; usingSystem.Linq; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.HtmlControls; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; usingSystem.Xml.Linq; usingyihan.Data; publicpartialclassmonitor_monitor_group_class_list:System.Web.UI.Page { protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { DataTabledt=newDataTable(); stringresultString=""; stringsql="select*frommonitor_grouporderbyorderbydesc,monitor_grp_id"; DbConnconn=newDbConn(); dt=conn.DataTable(sql); Literal1.Text=myDataBind.GetTree_monitor_grp_id(dt,0,refresultString);//调用 dt.Dispose(); conn.Close(); } } }
class_list.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="class_list.aspx.cs"Inherits="monitor_monitor_group_class_list"%> <body> <formid="form1"runat="server"> <tableclass="conBox"width="100%"border="0"cellpadding="0"cellspacing="1"bgcolor="#66AADD"> <tralign="center"bgcolor="#999999"> <thwidth="36%"bgcolor="#BAD8EF">监视器组名称</th> <thwidth="9%"bgcolor="#BAD8EF">级别</th> <thwidth="15%"bgcolor="#BAD8EF">子节点总数</th> <thwidth="29%"bgcolor="#BAD8EF">操作</th> </tr> <tr> <tdcolspan="5"style="padding-left:6px;background:#DBDBDB;">监视器组</td> </tr> <asp:LiteralID="Literal1"runat="server"></asp:Literal> </table> </form> </body>
手写Table
strings="<table>" s+="<tr><td>"; s+=变量值; s+="</td></tr></table>"; ResPonse.Write(s);
至于循环及其其他的方法自己构造
更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net文件操作技巧汇总》、《asp.netajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。