因为DataGrid控件的简单易懂,大多数做.NET程序员都喜欢用,有需要把数据显示成表格样式的地方DataGrid会是首选,但是所有的东西都会有好和不好的一面,DataGrid在给我们带来了数据显示方便的同时,也给我们带来了不灵活的问题,多层表头就是例子。       相信大家都遇到过这样的需求:

 
Head1
 
Head2
Head3
 
Head4
SubTitle1
SubTitle2

我在网上Google和Baidu了一下,发现大家都是在DataGrid的ItemCreated和ItemDataBind事件中来实现的(实现的方法太多,这里就不用列举了),我觉得这样做效率不高而且麻烦,因为需要在系统中每个用到DataGrid的地方都需要添加那样的实现代码。所以我想可以通过重写DataGrid的Render方法来实现多层表头的显示,代码如下:

-Index_Head);                                 //将默认的表格头替换成我们想要的表格头HTML                 StrToRender = Tem_Str.Replace(OldHeadHTML,this.HeadHTML);             }             //将新的结果输出到writer             writer.Write(StrToRender);         }     } }

在有需要使用多层表头的地方使用这个自定义的DataGrid,只需要在DreamWeaver里面设计好一个表头,然后把CustomDatagrid的HeadHTML属性设置为在DreamWeaver中生成的HTML即可。
      比如你在DreamWeaver中得到的表头HTML是:

<TABLE>     <TR>       <TD rowspan="2"><div align="center"></div>                <div align="center">Head1</div></TD>       <TD rowspan="2"><div align="center"></div>                <div align="center">Head2</div></TD>       <TD colspan="2"><div align="center">Head3</div></TD>       <TD rowspan="2"><div align="center"></div>                <div align="center">Head4</div></TD>     </TR>     <TR>       <TD><div align="center">SubTitle1</div></TD>       <TD><div align="center">SubTitle2</div></TD>     </TR> </TABLE>

那么你只需把下面这段字符串赋值给CustomDataGrid的HeadHTML:

    <TR>       <TD rowspan="2"><div align="center"></div>                <div align="center">Head1</div></TD>       <TD rowspan="2"><div align="center"></div>                <div align="center">Head2</div></TD>       <TD colspan="2"><div align="center">Head3</div></TD>       <TD rowspan="2"><div align="center"></div>                <div align="center">Head4</div></TD>     </TR>     <TR>       <TD><div align="center">SubTitle1</div></TD>       <TD><div align="center">SubTitle2</div></TD>     </TR>

值得注意的是这里没有包括表格开始标签<Table>和表格结束标签</Table>,这取决于重写DataGrid的Render方法的方式,这里的重写方式不需要这两个标签。
       好了,现在不管在设计试图和还是在运行页面都可以看到多层表头的样子了。

//***************************************

StartIndex 不能小于 0。参数名: startIndex 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 行 41: int Index_Head = Tem_Str.IndexOf("<tr>"); 行 42: int Index_Last = Tem_Str.IndexOf("</tr>"); 行 43: string OldHeadHTML = Tem_Str.Substring(Index_Head,Index_Last+5-Index_Head);

***--

改為int Index_Head = Tem_Str.IndexOf("<tr就可以了

示例:http://files.cnblogs.com/ewyb/WebApplication3.zip

来源:http://www.cnblogs.com/Fooo/archive/2009/05/22/1486880.html

WebUI中 DataGrid多层表头 的终极解决办法的更多相关文章

  1. 响应式框架中,table表头自动换行的解决办法

    最近在用bootstrap开发网站,在处理一张table的时候发现,通过PC端查看样式正常,在手机上查看时,因为屏幕小,表格被压缩的厉害,表头和数据变形如下图 后来网上找了一下,发现一个好用的CSS属 ...

  2. Genymotion模拟器环境搭建中的各种坑,终极解决办法

    最近刚进入了一家公司,因为要做自动化测试,web端的业务需要移动端来进行配合,想了想还是利用genymotion模拟器吧:很久前装过,那也是一路坎坷啊,结果这次还是遇到坑了,搞了老半天:我希望我踩过的 ...

  3. XP系统中IIS访问无法显示网页,目前访问网站的用户过多。终极解决办法

    无法显示网页 目前访问网站的用户过多. -------------------------------------------------------------------------------- ...

  4. win8和win7下解决php5.3和5.4、5.5等不能加载php_curl.dll的终极解决办法 收藏

    win8和win7下解决php5.3和5.4.5.5等不能加载php_curl.dll的终极解决办法 收藏2015年01月11日 最近分别在WIN7和Windows8 上分别安装php 高版本!都遇到 ...

  5. ecshop验证码图片无法显示终极解决办法

    ecshop验证码图片无法显示终极解决办法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2014-06-06   客户在安装好ecshop之后所有前台的证码不显示,后 ...

  6. 终极解决办法rvct Cannot obtain license for Compiler (feature compiler) with license version >= 3.1

    参考:https://blog.csdn.net/nic_r/article/details/7458038 ARM C/C++ Compiler, RVCT4. [Build ] armcc : e ...

  7. IIS关于“ 配置错误 不能在此路径中使用此配置节”的解决办法

    IIS关于“ 配置错误 不能在此路径中使用此配置节”的解决办法 原文链接:http://www.cnblogs.com/200325074/p/3679316.html 今天刚安装好IIS8.5, 我 ...

  8. Excel在任务栏中只显示一个窗口的解决办法

     Excel在任务栏中只显示一个窗口的解决办法  以前朋友遇到过这个问题,这次自己又遇到了,习惯了以前的那种在任务栏中显示全部窗口,方便用Alt+Tab键进行切换. 如果同时打开许多Excel工作簿, ...

  9. 在ASP.net中的UpdatePanel,弹窗失败解决办法

    原文:在ASP.net中的UpdatePanel,弹窗失败解决办法 最开始我用: Response.Write("<script>alert('和哈呵呵呵呵呵呵!')</s ...

随机推荐

  1. python 机器学习框架scikit-learn安装

    1.windows环境whl包下载地址 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 2.安装numpy.scipy.scikit-learn.matplotl ...

  2. activemq修改admin密码

    vim /usr/local/activemq/conf/jetty-realm.properties 用户名:密码,角色 mq: 123, admin 那么打开管理后台,用户是mq,密码是123,具 ...

  3. (13)python 正则表达式

    匹配单个字符 f. o    f和o之间是任意字符   例如:fbo123 .. 任意两个字符 \.用来匹配. 边界匹配 the     表示包含the的任何字符串 ^from 表示以from开头的所 ...

  4. Cent OS 运行 Cuberite

    Cuberite 是一个轻量级的Minecraft服务端,由C++编写,性能比Mojang等等用java写的高很多. 在腾讯云的最低端VPS上,用Spigot建服的话,从主世界传送到下界用时要五六秒的 ...

  5. jmeter bean shell断言加密的响应信息

    断言加密的响应信息 1.在http请求-->添加-->断言-->bean shell 断言 import com.changfu.EncryptAndDecryptInterface ...

  6. [xsy2978]Product of Roots

    $\newcommand{align}[1]{\begin{align*}#1\end{align*}}$题意:给出$f(x)=\prod\limits_{i=1}^n(a_ix+1)$和$g(x)= ...

  7. 【AC自动机】【矩阵乘法】【等比数列】hdu2243 考研路茫茫——单词情结

    题解:http://blog.csdn.net/xingyeyongheng/article/details/10005923 这里采用了二分法求等比数列前n项和. 等比数列前n项和也可以用矩乘快速幂 ...

  8. 【并查集】Gym - 100923H - Por Costel and the Match

    meciul.in / meciul.out Oberyn Martell and Gregor Clegane are dueling in a trial by combat. The fight ...

  9. [TC-HouseProtection]House Protection

    题目大意: 一个平面直角坐标系中有给定的$n(n\le50)$个红点和$m(m\le50)$个蓝点,每个点可以选择画一个半径为$r$(所有的$r$相同)的圆或不画.圆的半径上限为$R(R\le1000 ...

  10. 泳池迷宫(p24)

    /*2018年8月26日15:55:29作者:冰樱梦page-24泳池迷宫*/public class swiming{public static void main(String[] args){i ...