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程序设计有所帮助。