因为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. Web.config中appSettings节点值两种读取方法

        <appSettings>    <add key="ClientPort" value="5252"/>   <add ...

  2. 51nod 最长公共子序列问题(动态规划)(LCS)(递归)

    最长公共子序列问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 abcicba abdkscab 输 ...

  3. ( 转 ) UML 类图

    在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...

  4. P3197越狱

    花费了好长时间,终于刷掉了这道题. 题目在这里(洛谷)  (信息学奥赛一本通) 嗯,没错,这是一道快速幂的题,不会快速幂点这里 好现在开始分析,这道题用小学奥数的思想就可以想到,直接算有多少种可能比较 ...

  5. [LA 3942] Remember the Word

    Link: LA 3942 传送门 Solution: 感觉自己字符串不太行啊,要加练一些蓝书上的水题了…… $Trie$+$dp$ 转移方程:$dp[i]=sum\{ dp[i+len(x)+1]\ ...

  6. [CF494D]Birthday

    题意:给一棵带边权的树,定义如下的一些东西 $S(x)$表示以$x$为根的子树中的节点组成的集合 $d(u,v)$表示$u$和$v$之间的距离 $f(u,v)\sum\limits_{x\in S(v ...

  7. 【权值分块】bzoj1503 [NOI2004]郁闷的出纳员

    权值分块,离散化非常蛋疼,只能离散化搞…… 需要支持操作:删除<=某个值得所有权值==打标记 O(sqrt(n)) 码长和我的平衡树差不多……速度快3倍左右. #include<cstdi ...

  8. Mybatis添加用户&&Mybatis添加用户返回ID

    (1)添加用户(添加User记录) <!--插入用户 --> <insert id="insertUser" parameterType="com.so ...

  9. JAVA 按时间排序

    排序使用的是 Collections.sort(List,Comparator) 自定义类实现Comparator接口 假如A的值大于B,你返回1.这样调用Collections.sort()方法就是 ...

  10. 重大新闻:腾讯大杀器来了,QQ浏览器微信版推出

    今日,腾讯在推出windows桌面版的微信后,又发布了一个重量级产品:QQ浏览器微信版 我们在PC端用微信又多了一种方式,而且比windows桌面版本更加友好,更加方便. 我相信:对于我们绝大多数办公 ...