从数据库中提取了一些数据,想按照一定格式输出到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请问要怎么做才能形成这种循环效果,先谢谢大家了   

解决方案 »

  1.   

    后台 递归ParentID拼接HTML、不过没看出你的结果规律。可否用字母代替?
      

  2.   

    呵呵,请大家仔细看看,前面的001001 和001001001前面6位数是一样的,001001001是001001的子分类001001 
    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>这样子的,不知道大侠看懂我的意思没
      

  3.   


    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这些二级目录,三级目录都循环不出来了,后面再加判断也行
      

  4.   

    要用递归。。
    既然你都知道
    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了后台写个递归方法就好了。
      

  5.   

    遍历001001下所有的节点 在遍历 子节点给个DEMO
    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
      

  6.   

     <table>
        <%=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>";    }
      

  7.   

    拼串 AJAX也行,得到服务器返回的数据后,动态去创建table tableRow
      

  8.   

    to:chuntian1983
    我就是不想重复读取数据库,才一次性读取出来,呵呵,不过你的方法也是可以的!谢谢大家,我用wxr0323的方法修改了下,又学了不少东西,原来还可以DataTable.select谢谢