从数据库中提取了一些数据,想按照一定格式输出到html,调试了很久还是不行,上网向各位兄弟大侠求教
SortID ParentID
001001 001
001001001 001001
001001002 001001
001001003 001001
001002 001
001002001 001002
001002002 001002
001002003 001002
001003 001
001003001 001003
001003002 001003
我现在想把这些数据按照表格的布局排列 001001 001002 001003
001001001 001001002 001002001 001002002 001003001 001003002
001001003 001001004 001002003 001002004 001003003 001003004请问要怎么做才能形成这种循环效果,先谢谢大家了
SortID ParentID
001001 001
001001001 001001
001001002 001001
001001003 001001
001002 001
001002001 001002
001002002 001002
001002003 001002
001003 001
001003001 001003
001003002 001003
我现在想把这些数据按照表格的布局排列 001001 001002 001003
001001001 001001002 001002001 001002002 001003001 001003002
001001003 001001004 001002003 001002004 001003003 001003004请问要怎么做才能形成这种循环效果,先谢谢大家了
解决方案 »
- 三层架构购物网站 列明不明确
- 急,问个关于session.timeout的问题
- 【求助】求一个sql语句实现查找所有叶子节点
- int depts=1 断点时无值 一个非常奇怪的问题
- 给 cpp2017(慕白兄)另开一 100 分贴:总是已经解决一大半了!补分!关于 javascript 校验的问题!
- 帮我写个生成xml的代码
- index = ~index;?这什么意思?解决立即给分!
- (c#)怎样在DataGrid的每一行中添加绑定的下拉菜单?
- 如何察看客户端post数据的具体内容
- 第一次提问,多给点分吧!
- ie下不显示图片别的浏览器可以显示
- div+css在IE6下面布局混乱问题,IE7下正常
001001001 001001002
001001003 001001004
001002
001002001 001002002
001002003 001002004
001003
001003001 001003002
001003003 001003004从数据库提取出来的时候是
SortID ParentID
001001 001
001001001 001001
001001002 001001
001001003 001001
001002 001
001002001 001002
001002002 001002
001002003 001002
001003 001
001003001 001003
001003002 001003我现在希望输出的结果就是类似于table的效果
<table>
<tr>
<td colspan="2">001001</td>
<td colspan="2">001002</td>
<td colspan="2">001003</td>
</tr>
<tr>
<td>001001001</td>
<td>001001002</td>
<td>001002001</td>
<td>001002002</td>
<td>001003001</td>
<td>001003002</td>
</tr>
<tr>
<td>001001003</td>
<td>001001004</td>
<td>001002003</td>
<td>001002004</td>
<td>001003003</td>
<td>001003004</td>
</tr>这样子的,不知道大侠看懂我的意思没
if(dt.Sort.Rows[i]["ParentID"].ToString().Length==3)
{
NavSort.Controls.Add(new LiteralControl("<div class='navbox'>))
NavSort.Controls.Add(new LiteralControl("<div class='navboxList'>))
NavSort.Controls.Add(new LiteralControl("<h3>001001</h3>"))
NavSort.Controls.Add(new LiteralControl("</div>"))
NavSort.Controls.Add(new LiteralControl("</div>"))
}
只循环出了001001,001002,001003,001004这些二级目录,三级目录都循环不出来了,后面再加判断也行
既然你都知道
NavSort.Controls.Add(new LiteralControl("<div class='navbox'>))
NavSort.Controls.Add(new LiteralControl("<div class='navboxList'>))
NavSort.Controls.Add(new LiteralControl("<h3>001001</h3>"))
NavSort.Controls.Add(new LiteralControl("</div>"))
NavSort.Controls.Add(new LiteralControl("</div>"))
拼接HTML了后台写个递归方法就好了。
if(dt.Sort.Rows[i]["ParentID"].ToString().Length==3)
{
NavSort.Controls.Add(new LiteralControl("<div class='navbox'>))
NavSort.Controls.Add(new LiteralControl("<div class='navboxList'>))
NavSort.Controls.Add(new LiteralControl("<h3>001001</h3>"))
NavSort.Controls.Add(new LiteralControl("</div>"))
NavSort.Controls.Add(new LiteralControl("</div>"))
}
else if (dt.Sort.Rows[i]["ParentID"].ToString().Length==6)
{
加载。。
}
else
{
加载..
}这样写不是很活 呵呵给你个以前写的DEMO一个动态菜单public string CreateTreeStr(string nList, string Fid)
{
string MenuStr = string.Empty;
//一次性读完,然后匹配
DataTable AllDatatable = Iadmin.GetListValue(nList);
DataRow[] drs = AllDatatable.Select("M_Fid=0 and M_IsUser=1");
DataTable ParentDataTable = drs[0].Table.Clone();
foreach (DataRow dr in drs)
{
ParentDataTable.ImportRow(dr);
} for (int i = 0; i <= ParentDataTable.Rows.Count - 1; i++)
{
MenuStr += "<div id=\"KB" + (i + 1) + "Parent\" class=\"parent\">";
MenuStr += " <table width=\"158\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
MenuStr += "<tr>";
MenuStr += "<td height=\"25\" background=\"Admin/images/admin_left_" + (i + 1) + ".gif\">";
MenuStr += "<a href=\"javascript:void(0)\" onclick=\"expandIt('KB" + (i + 1) + "'); return false\">";
MenuStr += "<strong><font color=\"#003399\">" + ParentDataTable.Rows[i]["M_name"].ToString() + "</font></strong></a></td>";
MenuStr += "</tr>";
MenuStr += "</table>";
MenuStr += "</div>";
DataRow[] drsChild = AllDatatable.Select("M_Fid=" + ParentDataTable.Rows[i][0].ToString().Trim() + " and M_IsUser=1");
DataTable ChildDataTable = drs[0].Table.Clone();
foreach (DataRow dr in drsChild)
{
ChildDataTable.ImportRow(dr);
}
if (ChildDataTable.Rows.Count != 0)
{
MenuStr += "<div id=\"KB" + (i + 1) + "Child\" class=\"child\">";
MenuStr += "<table width=\"158\" cellpadding=\"0\" cellspacing=\"0\">";
for (int j = 0; j <= ChildDataTable.Rows.Count - 1; j++)
{
MenuStr += "<tr>";
MenuStr += "<td height=\"21\" background=\"Admin/images/bg_show.gif\">";
if (ChildDataTable.Rows[j]["M_Url"].ToString() != "")
{
MenuStr += "<a href=" + ChildDataTable.Rows[j]["M_Url"].ToString() + " target=\"right\">" + ChildDataTable.Rows[j]["M_name"].ToString() + "</a></td>";
}
else
{
MenuStr += "<a href=\"#\" target=\"right\">" + ChildDataTable.Rows[j]["M_name"].ToString() + "</a></td>";
}
MenuStr += "</tr>";
}
MenuStr += "</table>";
MenuStr += "</div>";
}
MenuStr += "<div style=\"height:10px;\">";
MenuStr += "</div>";
}
return MenuStr;
}
也是ID NAME M_Fid
1 A 0 //为一级节点 2 B 1 //父节点为A
<%=strhtml %>
<tr>
<td colspan="2">001001</td>
<td colspan="2">001002</td>
<td colspan="2">001003</td>
</tr>
<tr>
<td>001001001</td>
<td>001001002</td>
<td>001002001</td>
<td>001002002</td>
<td>001003001</td>
<td>001003002</td>
</tr>
<tr>
<td>001001003</td>
<td>001001004</td>
<td>001002003</td>
<td>001002004</td>
<td>001003003</td>
<td>001003004</td>
</tr>
public string strhtml;//关键是这里最后在页面上输出的
protected void Page_Load(object sender, EventArgs e)
{
strhtml += "<tr>";
string strsql = "";//这里取出你001一级的数据我省略你补充下。
DataTable dt = new DataTable();//最后形成一个datatable应该会吧
for (int i = 0; i < dt.Rows.Count; i++)
{
strhtml += @"<td colspan='2'>"+dt.Rows[i][""].ToString()+"</td>";//第一级出来了
}
strhtml += @"</tr><tr>";
string strsql2 = "";//这里取出你第二级的数据我省略你补充下。
DataTable dt2 = new DataTable();//最后形成一个datatable应该会吧
for (int i = 0; i < dt2.Rows.Count; i++)
{
strhtml += @"<td>" + dt.Rows[i][""].ToString() + "</td>";//第一级出来了
}
strhtml += "</tr>"; }
我就是不想重复读取数据库,才一次性读取出来,呵呵,不过你的方法也是可以的!谢谢大家,我用wxr0323的方法修改了下,又学了不少东西,原来还可以DataTable.select谢谢