关于树型结构数据生成表格问题

时间:2022-04-29 13:24:31
有这么一个树形结构的数据以及在数据库中存储的表的形式
关于树型结构数据生成表格问题
现在已经获取到了表的数据list,要输出如这样的表格
关于树型结构数据生成表格问题

这个问题考虑了很久,这个应该还涉及到单元格合并,奈何水平有限,求大神给个思路

4 个解决方案

#1


1.手动拼table.
计算出这个table几行、几列.
一个id占几行

如 图二的话,算出 4 行 3列
第一列 根节点占4行
第二列 1、2各占2行
第三列 各占一行
循环列 里面 再循环行

2.把整个表格打到页面,然后加载完成以后合拼相同列.


#2


正确的思路是:你要首先把最后这个图
关于树型结构数据生成表格问题
在你的程序中的数据结构写出来,而不要纠结数据库表中原始数据。纠结数据库表原始数据,只会绕来绕去,一直在你觉得最傻瓜化的那点概念上打转而找不到方向。

#3


之所以“这个问题考虑了很久”,你看看自己(以及身边的人)的知识描述方式就会发现,如果都是拼凑的模式,躺在别人的例子上去抄袭,一直学习的都是最低级的分析设计规范,而懒得按照实践者的方法规范去设计程序。

#4


在页面后台用StringBuilder拼接table,tr,td,再把页面后台拼接好的表格显示到页面上,然后将页面上的表格导出

页面前台:



<asp:ImageButton ID="Button1" runat="server"   OnClick="Button1_Click"
                                    ToolTip="查询" />





<div id="divp" runat="server"  style="display:inline-block;">
 </div>
<input type="hidden" runat="server" id="hideReport" value="" />







protected void Page_Load(object sender, System.EventArgs e)
{
                     if(!Page.IsPostBack)
{
                              ShowTable();
                       }
               }

protected void Button1_Click(object sender, ImageClickEventArgs e)
{
                     ShowTable();
}

             public void ShowTable()
              {
                   divp.InnerHtml = ShowTableFunction();
               }

             public string ShowTableFunction()
             {
                    StringBuilder  StringText = new StringBuilder();
                    StringText.Append("<div style='overflow:auto;margin:0px;padding:0px;'>");

                    如 图二,得出 4 行 3列
                    第一列 根节点占4行
                    第二列 1、2各占2行
                    第三列 各占一行
                    循环列 里面 再循环地拼接table,tr,td
                    
                    StringText.Append("</div>");
                    return StringText.ToString();
             }



在页面上显示好表格之后,如果你还想将表格导出到Word文档里,就用下面的方法:



            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.AppendHeader("Content-Disposition", "attachment;filename=OrderReport(" + System.DateTime.Now.Year + System.DateTime.Now.Month + System.DateTime.Now.Day + ").doc");
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");  
            Response.ContentType = "application/ms-word";
            this.EnableViewState = false;
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            divp.Visible = true;
            this.divp.RenderControl(oHtmlTextWriter);
            Response.Write(oStringWriter.ToString());
            divp.Visible = false;
            Response.End();





#1


1.手动拼table.
计算出这个table几行、几列.
一个id占几行

如 图二的话,算出 4 行 3列
第一列 根节点占4行
第二列 1、2各占2行
第三列 各占一行
循环列 里面 再循环行

2.把整个表格打到页面,然后加载完成以后合拼相同列.


#2


正确的思路是:你要首先把最后这个图
关于树型结构数据生成表格问题
在你的程序中的数据结构写出来,而不要纠结数据库表中原始数据。纠结数据库表原始数据,只会绕来绕去,一直在你觉得最傻瓜化的那点概念上打转而找不到方向。

#3


之所以“这个问题考虑了很久”,你看看自己(以及身边的人)的知识描述方式就会发现,如果都是拼凑的模式,躺在别人的例子上去抄袭,一直学习的都是最低级的分析设计规范,而懒得按照实践者的方法规范去设计程序。

#4


在页面后台用StringBuilder拼接table,tr,td,再把页面后台拼接好的表格显示到页面上,然后将页面上的表格导出

页面前台:



<asp:ImageButton ID="Button1" runat="server"   OnClick="Button1_Click"
                                    ToolTip="查询" />





<div id="divp" runat="server"  style="display:inline-block;">
 </div>
<input type="hidden" runat="server" id="hideReport" value="" />







protected void Page_Load(object sender, System.EventArgs e)
{
                     if(!Page.IsPostBack)
{
                              ShowTable();
                       }
               }

protected void Button1_Click(object sender, ImageClickEventArgs e)
{
                     ShowTable();
}

             public void ShowTable()
              {
                   divp.InnerHtml = ShowTableFunction();
               }

             public string ShowTableFunction()
             {
                    StringBuilder  StringText = new StringBuilder();
                    StringText.Append("<div style='overflow:auto;margin:0px;padding:0px;'>");

                    如 图二,得出 4 行 3列
                    第一列 根节点占4行
                    第二列 1、2各占2行
                    第三列 各占一行
                    循环列 里面 再循环地拼接table,tr,td
                    
                    StringText.Append("</div>");
                    return StringText.ToString();
             }



在页面上显示好表格之后,如果你还想将表格导出到Word文档里,就用下面的方法:



            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.AppendHeader("Content-Disposition", "attachment;filename=OrderReport(" + System.DateTime.Now.Year + System.DateTime.Now.Month + System.DateTime.Now.Day + ").doc");
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");  
            Response.ContentType = "application/ms-word";
            this.EnableViewState = false;
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            divp.Visible = true;
            this.divp.RenderControl(oHtmlTextWriter);
            Response.Write(oStringWriter.ToString());
            divp.Visible = false;
            Response.End();