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

Head1
Head2
Head3
Head4
SubTitle1
SubTitle2

 

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

WebUI中 DataGrid多层表头 的终极解决办法using System;
WebUI中 DataGrid多层表头 的终极解决办法
using System.Web.UI;
WebUI中 DataGrid多层表头 的终极解决办法
using System.Web.UI.WebControls;
WebUI中 DataGrid多层表头 的终极解决办法
using System.ComponentModel;
WebUI中 DataGrid多层表头 的终极解决办法
WebUI中 DataGrid多层表头 的终极解决办法
namespace CustomDBGrid
}

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

      比如你在DreamWeaver中得到的表头HTML是:

WebUI中 DataGrid多层表头 的终极解决办法<TABLE>
WebUI中 DataGrid多层表头 的终极解决办法    
<TR>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD rowspan="2"><div align="center"></div>        
WebUI中 DataGrid多层表头 的终极解决办法        
<div align="center">Head1</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD rowspan="2"><div align="center"></div>        
WebUI中 DataGrid多层表头 的终极解决办法        
<div align="center">Head2</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD colspan="2"><div align="center">Head3</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD rowspan="2"><div align="center"></div>        
WebUI中 DataGrid多层表头 的终极解决办法        
<div align="center">Head4</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法    
</TR>
WebUI中 DataGrid多层表头 的终极解决办法    
<TR>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD><div align="center">SubTitle1</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD><div align="center">SubTitle2</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法    
</TR>
WebUI中 DataGrid多层表头 的终极解决办法
</TABLE>

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

WebUI中 DataGrid多层表头 的终极解决办法    <TR>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD rowspan="2"><div align="center"></div>        
WebUI中 DataGrid多层表头 的终极解决办法        
<div align="center">Head1</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD rowspan="2"><div align="center"></div>        
WebUI中 DataGrid多层表头 的终极解决办法        
<div align="center">Head2</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD colspan="2"><div align="center">Head3</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD rowspan="2"><div align="center"></div>        
WebUI中 DataGrid多层表头 的终极解决办法        
<div align="center">Head4</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法    
</TR>
WebUI中 DataGrid多层表头 的终极解决办法    
<TR>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD><div align="center">SubTitle1</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法      
<TD><div align="center">SubTitle2</div></TD>
WebUI中 DataGrid多层表头 的终极解决办法    
</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就可以了

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-12-23
  • 2022-12-23
  • 2021-11-22
  • 2021-04-22
猜你喜欢
  • 2022-12-23
  • 2022-01-29
  • 2021-10-17
  • 2021-09-14
相关资源
相似解决方案