以前看到动态生成table的代码时,认为特别复杂,看到代码就不想看,认为这个用不到,而且还抱着一种难的心理.
不管则着,还是逃不过,躲避不是好的方法,这次就用到了动态生成表的要求,不学不行呀,不然页面达不到效果.
下面是我自己实现的一个实例
首先是在前台页面拖出一个html的table , 我们可以设定表头,也可不设定表头
这里我就自己设定表头了
- <html>
- <body>
- <form id="form1"runat="server">
- < tableidtableid="tblAutoTable" class="data-table history"runat="server" style="width: 68%; margin-bottom: 0px; height:40px; margin: 0 ;" >
- <thead>
- <tr>
- <thalignthalign="left">文件名</th>
- <th align="left">文件大小
- </th>
- <thalignthalign="left"><input type="checkbox"id="checkAll" name="checkAll" />
- </th>
- </tr>
- </thead>
- <tbody >
- <!--这里是要进行拼接的表-->
- </tbody>
- </table>
- </form>
- </body>
- </html>
后台怎么设定,首先是获取查询到的数据(我是用Datatable获取查询到的数据的).
1后台循环dtatable中的行作为循环的次数.
2创建表的行
3创建表的列(可多列),给列赋值
4将列添加到表的行中
5将行添加到表中,进行循环,就得到一个表
下面是实例代码
- #region 查询文件
- /// <summary>
- /// 查询文件
- /// </summary>
- private void QueryFile()
- {
- //创建Mongobd非结构化数据库连接
- MongoDatabase db = getConn();
- // MongoGridFS fs = newMongoGridFS(db); //默认读取的集合表名是filse
- //设定查询的表名
- MongoGridFSSettings fsSetting = newMongoGridFSSettings() { Root = fileTable };
- //初始化查询对象
- MongoGridFS fs = newMongoGridFS(db, fsSetting);
- //执行查询的方法
- MongoCursor<MongoGridFSFileInfo> docList = fs.FindAll();
- HtmlTableRow trFirst = newHtmlTableRow();//tianjai yihang
- HtmlTableCell tcTitle = newHtmlTableCell();
- tcTitle.InnerText ="文件名";
- trFirst.Controls.Add(tcTitle);
- //tblAutoTable.Controls.Add(trFirst);
- foreach (MongoGridFSFileInfo doc indocList)
- {
- UInt32 length =Convert.ToUInt32(doc.Length);
- string size = null;
- if (length > 1024 * 1024)
- size = ((double)length /1024 / 1024).ToString("F2") + "MB";
- else if (length > 1024)
- size = ((double)length /1024).ToString("F2") + "KB";
- else
- size = length.ToString() +"B";
- //动态拼接表
- HtmlTableRow tr = newHtmlTableRow();
- //添加文件名列
- HtmlTableCell tcCol = newHtmlTableCell();
- string name = doc.Name;//获取文件名
- tcCol.Width ="300";//设定列的宽度
- tcCol.InnerHtml = "<ahref='/Teacher/mongodb/FileManage.ashx?action=DOWNLOAD&value="+name+"'target='_blank'>"+name+"</a>";//文件名实现单机下载图片
- //Response.Write(name);
- tr.Controls.Add(tcCol);//将文件名列添加到行中
- //添加文件大小列
- HtmlTableCell tc = newHtmlTableCell();
- TextBox tb = newTextBox();//创建文本框对象
- tb.Width = 120;//设定宽度
- tb.Text = size;//设定文本框中的值
- tc.Controls.Add(tb);//单元格内容赋值
- tr.Controls.Add(tc);
- tblAutoTable.Controls.Add(tr);//将行添加到表中
- 添加删除选项
- //HtmlTableCell tcCheck = newHtmlTableCell();
- //CheckBox tbcheck = newCheckBox();
- //tcCheck.Controls.Add(tbcheck);
- //tcCheck.Width ="50";
- //tr.Controls.Add(tcCheck);
- }
- }
- #endregion
实例效果图如下
从代码的实例中可以看出,创建表格就是实例化对象,然后给对象赋值,它和先前的对象如出一辙的,并没有想象的那么难。
对比:
对于一个已经创建好的Dtatable,如何给Datatable循环添加行和列,于此类似,大家可以对比研究。