`
buliedian
  • 浏览: 1238423 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WebUI中DataGrid多层表头的终极解决办法

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

Head1
Head2
Head3
Head4
SubTitle1
SubTitle2

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

namespaceCustomDBGrid
{
/**//**//**////<summary>
///CustomDataGrid的摘要说明。
///</summary>

[ToolboxData("<{0}:CustomDataGridrunat=server></{0}:CustomDataGrid>")]
publicclassCustomDataGrid:System.Web.UI.WebControls.DataGrid
{
publicstringHeadHTML
{
get{
if(ViewState["HeadHTML"]!=null)
returnViewState["HeadHTML"].ToString();
else
returnnull;
}

set{
ViewState[
"HeadHTML"]=value;
}

}

protectedoverridevoidRender(HtmlTextWriterwriter)
{
System.IO.StringWriterstringWriter
=newSystem.IO.StringWriter();
System.Web.UI.HtmlTextWriterTem_Writer
=newHtmlTextWriter(stringWriter);
//获得原始输出结果
base.Render(Tem_Writer);

stringTem_Str=stringWriter.ToString();
stringStrToRender=Tem_Str;

if(this.HeadHTML!=null)
{
//得到默认的表格第一行的HTML,这一行就是表格头了
intIndex_Head=Tem_Str.IndexOf("<tr>");
intIndex_Last=Tem_Str.IndexOf("</tr>");
stringOldHeadHTML=Tem_Str.Substring(Index_Head,Index_Last+5-Index_Head);

//将默认的表格头替换成我们想要的表格头HTML
StrToRender=Tem_Str.Replace(OldHeadHTML,this.HeadHTML);
}


//将新的结果输出到writer
writer.Write(StrToRender);
}


}

}

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

比如你在DreamWeaver中得到的表头HTML是:
<TABLE>
<TR>
<TDrowspan="2"><divalign="center"></div>
<divalign="center">Head1</div></TD>
<TDrowspan="2"><divalign="center"></div>
<divalign="center">Head2</div></TD>
<TDcolspan="2"><divalign="center">Head3</div></TD>
<TDrowspan="2"><divalign="center"></div>
<divalign="center">Head4</div></TD>
</TR>
<TR>
<TD><divalign="center">SubTitle1</div></TD>
<TD><divalign="center">SubTitle2</div></TD>
</TR>
</TABLE>
那么你只需把下面这段字符串赋值给CustomDataGrid的HeadHTML:
<TR>
<TDrowspan="2"><divalign="center"></div>
<divalign="center">Head1</div></TD>
<TDrowspan="2"><divalign="center"></div>
<divalign="center">Head2</div></TD>
<TDcolspan="2"><divalign="center">Head3</div></TD>
<TDrowspan="2"><divalign="center"></div>
<divalign="center">Head4</div></TD>
</TR>
<TR>
<TD><divalign="center">SubTitle1</div></TD>
<TD><divalign="center">SubTitle2</div></TD>
</TR>
值得注意的是这里没有包括表格开始标签<Table>和表格结束标签</Table>,这取决于重写DataGrid的Render方法的方式,这里的重写方式不需要这两个标签。

好了,现在不管在设计试图和还是在运行页面都可以看到多层表头的样子了。
分享到:
评论

相关推荐

    DataGridView实现多层表头

    在.NET框架中,`...总的来说,"DataGridView实现多层表头"是一个高级的.NET编程技巧,涉及到控件的自定义、图形绘制、事件处理和数据绑定等多个方面,对于提升开发者的技能水平和解决问题的能力具有很高的价值。

    DataGrid表头合并和单元格内容合并-升级版

    这个“DataGrid表头合并和单元格内容合并-升级版”主题主要聚焦于如何在DataGrid中实现复杂的表头和单元格合并功能,以适应多层结构的数据展示需求。 首先,我们要理解在DataGrid中进行表头合并的意义。通常,当...

    C#DataGridView多层表头

    在C#编程中,我们有时需要创建复杂的表格布局,这时多层表头的功能就显得尤为必要。本篇将详细介绍如何在VS2008下实现C# `DataGridView`的多层表头,并探讨回车下一列的用户组件实现。 首先,多层表头(Nested ...

    DataGrid固定表头

    3. 使用前端框架:现代前端框架如React、Vue和Angular都有自己的DataGrid组件库,如React-Table、Element UI(Vue)和Angular Material的MatTable,它们内置了固定表头的功能。只需按照文档配置,即可轻松实现。 4....

    datagrid 多表头及动态生成的实现

    本篇文章将详细介绍如何使用JQuery EasyUI插件中的datagrid组件实现多表头以及动态生成表格的功能。 #### 技术背景 - **JQuery EasyUI**:是一款基于jQuery的UI工具包,用于简化网页界面的开发。它提供了多种用户...

    wpf DataGrid复合表头

    本篇文章将详细探讨如何在WPF中实现DataGrid的复合表头功能,并确保在拖动列时仍能保持其正确的位置和关系。 首先,复合表头的基本概念是指表头由多个水平或垂直排列的小表头组成,这种设计可以清晰地表示出数据...

    DataGrid 复杂表头

    本主题将深入探讨如何在WPF中创建和自定义DataGrid的复杂表头,以显示多层次的表头信息。 ### 1. 数据网格概述 WPF的DataGrid控件源自Silverlight,并在.NET Framework 4.0中被引入。它提供了丰富的功能,如排序、...

    winform datagridview多层表头

    在C#中实现`DataGridView`的多层表头,主要涉及到以下几个步骤: 1. **创建`DataGridView`控件**:首先,你需要在你的窗体(Form)上添加一个`DataGridView`控件。这可以通过设计视图或代码完成。例如,在代码中,...

    修改DataGrid表头样式

    在实际应用中,我们往往需要根据设计需求对DataGrid的外观进行定制,包括改变表头的样式。本篇将详细介绍如何修改DataGrid的表头样式,以实现个性化的设计。 首先,我们要理解DataGrid的结构。DataGrid由多个部分...

    多层表头DataGridView示例(例子)

    在传统的单层表头`DataGridView`中,表头通常只有一行,而在多层表头的实现中,我们可以将表头分为多个层次,以更清晰地展示复杂的数据结构。例如,对于一个销售数据的表格,第一层表头可能是时间(如年份),第二层...

    Siverlight DataGrid动态表头

    在本项目"Silverlight DataGrid动态表头"中,我们关注的是如何实现DataGrid的表头可以根据需求动态变化,提供更灵活的用户界面。 1. **Silverlight DataGrid**:Silverlight DataGrid控件允许开发者以网格形式展示...

    flex DataGrid 表头分组

    3. **配置`AdvancedDataGrid`组件**:Flex中的`AdvancedDataGrid`相对于基础的`DataGrid`提供了更丰富的功能,包括表头分组。在`AdvancedDataGrid`中,我们需要设置`&lt;mx:columns&gt;`子元素来定义列,并为需要分组的列...

    DataGrid 实现复杂表头和合并行源码与示例

    一、不需要编写任何样式、只需通过代码添加将 ColumnItem 集合添加到DataGrid列集合,需要引用空间 using System.Windows.Controls ,才能添加扩展函数。 二、支持实现复杂的表头、不限分级层次; 三、复杂表头支持...

    C# DataGrid表头合并和单元格内容合并

    本教程将详细介绍如何在C#中实现DataGrid的表头合并和单元格内容合并,以及如何创建一个具有多层表头的示例(Demo)。 首先,我们要理解表头合并的概念。在DataGrid中,表头合并允许我们将多个列的标题合并成一个大...

    silverlight DataGrid 复杂表头的实现

    "silverlight DataGrid 复杂表头的实现"这个主题聚焦于如何在DataGrid中创建具有多层或者嵌套表头的复杂布局,以满足更高级别的数据统计和分析需求。 首先,我们需要了解Silverlight DataGrid的基本结构。DataGrid...

    Easyui-DataGrid表头拖动效果

    UI设计在一个系统中的重要性是不容忽视的,我们开发人员要做到:让用户去控制计算机,而不是计算机控制用户;减少用户的记忆负担;保持界面一致。 给你的Easyui-DataGrid 表头添加一点料吧 Easyui-Datagrid—表头...

    wpf 动态合并datagrid表头单元格

    以上就是关于在WPF中动态合并Datagrid表头单元格的核心知识点。通过自定义列类型和HeaderTemplate,结合数据绑定和视图模型,我们可以实现灵活且强大的表头合并功能,使数据展示更加清晰、易读。在实际项目中,可以...

    WPF多表头技术的实现,支持多行表头

    标题提到的"支持多行表头"是指在DataGrid的列头区域创建多层标题,每层标题可能跨越一列或多列。这种功能对于清晰地展示多层次的数据关系至关重要。在WPF中,这通常是通过自定义DataGridTemplateColumn或利用...

    siverlight报表,实现datagrid复杂表头

    所以只好用datagrid来实现,所以重点就是表头设计了。所以自己经过网上找资料看博客学习,用C#做了一个小demo。暂时不是动态实现的(还在编写中,完成后会上传宫大家学习),是静态模版。动态的可以自行扩展,再加上...

    固定表头的DataGrid

    在Web应用中,DataGrid可以是基于JavaScript库(如jQuery UI的DataGrid或React的Ag-Grid)或者服务器端技术(如ASP.NET的GridView或Java的JTable)实现的。 固定表头的核心在于分离表头和内容区域,确保在页面滚动...

Global site tag (gtag.js) - Google Analytics