我们.net俱乐部的一位朋友需要一个gridview的多表头实现,现给出两种实现
方法一:
转自:http://blog.csdn.net/ankoe/archive/2007/10/29/1854361.aspx
表头定义说明:
表头定义方法:相邻父列头之间用'#'分隔,上级行与下级行用空格(' ')分隔,相邻未级子列头用逗号分隔(',').
表头定义示例:
A.两层
烟叶等级#级别#保山市 保山,小计#楚雄州 姚安,小计#大理州 宾川,大理,小计#红河州 建水,泸西,弥勒,石屏,小计#昆明市 富民,禄劝,小计#丽江市 华坪,宁蒗,小计#临沧市 沧源,凤庆,耿马,临翔,双江,永德,云县,镇康,小计#普洱市 景东,思茅,镇沅,小计#曲靖市 富源,陆良,罗平,师宗,宣威,小计#文山州 文山,小计#玉溪市 玉溪,小计#总计
B.三层
等级#级别#上期结存 件数,重量,比例#本期调入 收购调入 件数,重量,比例#本期发出 车间投料 件数,重量,比例#本期发出 产品外销百分比 件数,重量,比例#平均值
调用说明:使用时在GridView的RowCreated事件中加入下面代码调用
if(e.Row.RowType==DataControlRowType.Header)
...{
DynamicTHeaderHeplerdHelper=newDynamicTHeaderHepler();
stringheader="等级#级别#上期结存件数,重量,比例#本期调入收购调入件数,重量,比例#本期发出车间投料件数,重量,"
+"比例#本期发出产品外销百分比件数,重量,比例#平均值";
dHelper.SplitTableHeader(e.Row,header);
}
表头生成类:
//
//***********************************************************************
//Created:2007-10-29Author:ruijc
//File:DynamicTHeaderHepler.cs
//Description:动态生成复合表头帮助类
//相邻父列头之间用'#'分隔,父列头与子列头用空格('')分隔,相邻子列头用逗号分隔(',').
//***********************************************************************
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Collections.Generic;
usingSystem.Collections;
publicclassDynamicTHeaderHepler
...{
publicDynamicTHeaderHepler()
...{
//
//TODO:Addconstructorlogichere
//
}
/**////<summary>
///重写表头
///</summary>
///<paramname="targetHeader">目标表头</param>
///<paramname="newHeaderNames">新表头</param>
///<remarks>
///等级#级别#上期结存件数,重量,比例#本期调入收购调入件数,重量,比例#本期发出车间投料件数,重量,
///比例#本期发出产品外销百分比件数,重量,比例#平均值
///</remarks>
publicvoidSplitTableHeader(GridViewRowtargetHeader,stringnewHeaderNames)...{
TableCellCollectiontcl=targetHeader.Cells;//获得表头元素的实例
tcl.Clear();//清除元素
introw=GetRowCount(newHeaderNames);
intcol=GetColCount(newHeaderNames);
string[,]nameList=ConvertList(newHeaderNames,row,col);
intRowSpan=0;
intColSpan=0;
for(intk=0;k<row;k++)
...{
stringLastFName="";
for(inti=0;i<col;i++)
...{
if(LastFName==nameList[i,k]&&k!=row-1)
...{
LastFName=nameList[i,k];
continue;
}
else
...{
LastFName=nameList[i,k];
}
intbFlag=IsVisible(nameList,k,i,LastFName);
switch(bFlag)
...{
case0:
break;
case1:
RowSpan=GetSpanRowCount(nameList,row,k,i);
ColSpan=GetSpanColCount(nameList,row,col,k,i);
tcl.Add(newTableHeaderCell());//添加表头控件
tcl[tcl.Count-1].RowSpan=RowSpan;
tcl[tcl.Count-1].ColumnSpan=ColSpan;
tcl[tcl.Count-1].HorizontalAlign=HorizontalAlign.Center;
tcl[tcl.Count-1].Text=LastFName;
break;
case-1:
string[]EndColName=LastFName.Split(newchar[]...{','});
foreach(stringeNameinEndColName)...{
tcl.Add(newTableHeaderCell());//添加表头控件
tcl[tcl.Count-1].HorizontalAlign=HorizontalAlign.Center;
tcl[tcl.Count-1].Text=eName;
}
break;
}
}
if(k!=row-1)
...{//不是起始行,加入新行标签
tcl[tcl.Count-1].Text=tcl[tcl.Count-1].Text+"</th></tr><tr>";
}
}
}
/**////<summary>
///如果上一行已经输出和当前内容相同的列头,则不显示
///</summary>
///<paramname="ColumnList">表头集合</param>
///<paramname="rowIndex">行索引</param>
///<paramname="colIndex">列索引</param>
///<returns>1:显示,-1:含','分隔符,0:不显示</returns>
privateintIsVisible(string[,]ColumnList,introwIndex,intcolIndex,stringCurrName)
...{
if(rowIndex!=0)...{
if(ColumnList[colIndex,rowIndex-1]==CurrName)...{
return0;
}else...{
if(ColumnList[colIndex,rowIndex].Contains(","))
...{
return-1;
}else...{
return1;
}
}
}
return1;
}
/**////<summary>
///取得和当前索引行及列对应的下级的内容所跨的行数
///</summary>
///<paramname="ColumnList">表头集合</param>
///<paramname="row">行数</param>
///<paramname="rowIndex">行索引</param>
///<paramname="colIndex">列索引</param>
///<returns>行数</returns>
privateintGetSpanRowCount(string[,]ColumnList,introw,introwIndex,intcolIndex)
...{
stringLastName="";
intRowSpan=1;
for(intk=rowIndex;k<row;k++)
...{
if(ColumnList[colIndex,k]==LastName)...{
RowSpan++;
}else...{
LastName=ColumnList[colIndex,k];
}
}
returnRowSpan;
}
/**////<summary>
///取得和当前索引行及列对应的下级的内容所跨的列数
///</summary>
///<paramname="ColumnList">表头集合</param>
///<paramname="row">行数</param>
///<paramname="col">列数</param>
///<paramname="rowIndex">行索引</param>
///<paramname="colIndex">列索引</param>
///<returns>列数</returns>
privateintGetSpanColCount(string[,]ColumnList,introw,intcol,introwIndex,intcolIndex)...{
stringLastName=ColumnList[colIndex,rowIndex];
intColSpan=ColumnList[colIndex,row-1].Split(newchar[]...{','}).Length;
ColSpan=ColSpan==1?0:ColSpan;
for(inti=colIndex+1;i<col;i++)...{
if(ColumnList[i,rowIndex]==LastName)
...{
ColSpan+=ColumnList[i,row-1].Split(newchar[]...{','}).Length;
}
else
...{
LastName=ColumnList[i,rowIndex];
break;
}
}
returnColSpan;
}
/**/</
分享到:
相关推荐
在ASP.NET中,GridView默认提供了一种简单的行和列结构,但为了满足更复杂的需求,例如多级表头或合并单元格,我们需要深入理解其模板和编程特性。复合表头允许我们在表头中创建层次结构,这对于显示分组数据或者...
asp.net中GridView控件的各种操作方法,使用大全,附加数据库。包含:GridView导入导出,多层嵌套,表头表尾,分页排序,结合控件,设置属性,增除删改,主键索引...物超所值,亲情放送!~
ASP.NET中的GridView控件是Web开发中用于展示数据的常用组件,它允许开发者在网页上以表格形式展示数据源中的信息。GridView控件提供了丰富的功能,包括但不限于表头表尾的自定义、数据的导入导出、多层嵌套、分页...
在.NET框架中,GridView控件是ASP.NET网页开发中常用的数据展示工具,它允许开发者以表格形式呈现数据。当我们需要展示复杂的数据结构,比如带有层次关系的表头时,多表头合并功能就显得尤为重要。本篇文章将深入...
在ASP.NET开发中,GridView控件是常用的数据展示组件,但默认情况下,其表头功能较为基础,无法满足复杂的表格布局需求。为了解决这一问题,开发者通常需要进行自定义表头的实现,以便创建更灵活、层次更丰富的表格...
在.NET框架中,GridView控件是ASP.NET Web Forms中常用的数据展示组件,它允许开发者以表格形式展示数据,便于用户浏览和操作。本示例主要介绍如何在C#编程环境中,利用Visual Studio 2008(VS2008)来扩展GridView...
GridView是ASP.NET中一个常用的控件,用于展示数据表格形式的内容。这个压缩包包含了一些关于GridView用法的示例,让我们来深入探讨一下。 首先,`Web.Config`文件是ASP.NET应用程序的配置文件,其中可能包含了...
12:在Gridview中实现多层嵌套 13:在Gridview中实现排序 14:在Gridview中实现分页 15:Gridivew结合CheckBox控件的使用 16:Gridview结合DropDownList控件的使用 17:Gridview结合RadioButtom的使用 ...
ASPX GridView 是 ASP.NET Web Forms 中的一个强大控件,它用于显示数据集合,并提供多种交互功能,如排序、分页、筛选、编辑、删除等。本资源提供了关于 GridView 使用的全面指南,涵盖了从基础到高级的各种场景。 ...
c)Gridview多层嵌套的应用; d)Gridview分页排序功能的实现; e)Gridview结合其他控件的使用; f)Gridview绑定数据后设置属性; g)在VS中实现Gridview无代码增除删改功能; h)Gridview增除删改功能; i)Girdview主键...
GridView是ASP.NET中一个常用的控件,用于展示数据集或者数据源中的表格数据。它具有高度可定制性,可以方便地进行...不断实践和研究,可以提高我们对ASP.NET GridView的掌控程度,构建出更高效、美观的数据展示界面。
### GridView大全知识点详解 #### 1. GridView无代码分页排序 **知识点解析:** - **AllowSorting属性:** 在ASP.NET中,GridView控件允许用户通过点击... GridView复合多层表头(不限级)!!! **知识点解析:** - **复合...
在C#编程环境中,GridView控件是ASP.NET Web Forms中常用的数据展示工具,它能够以表格形式展示数据,并提供多种交互功能。以下是对`C#中gridview使用实例`涉及的知识点的详细说明: 1. **基本使用**: GridView...
在ASP.NET开发中,GridView控件是一个非常常用的数据展示组件,尤其适合于表格形式的数据操作。这个经典用法涵盖了多个方面,包括数据呈现、交互功能、定制化以及数据管理。以下将详细介绍这些知识点: 1. **表头...
GridView是ASP.NET Web Forms中非常重要的一个数据呈现控件,它允许开发者以表格形式展示数据,提供了丰富的功能和自定义选项。在这个“Gridview用法大总结”中,我们将深入探讨以下几个关键知识点: 1. **基础用法...
1:语言:ASP.NET(C#) 运行环境:Visual Studio2005+Access 2:功能模块简介 a)Gridview表头表尾; b)实现Gridview数据与Excel互导; c)Gridview多层嵌套的应用; d)Gridview分页排序功能的实现; e)Gridview...
本篇文章将深入探讨GridView的使用,包括基础用法、报表导出、多层嵌套、控件嵌套以及如何设置常用属性,旨在帮助你在开发ASP.NET应用时更加得心应手。 一、GridView的基础使用 1. 添加GridView控件:在ASP.NET...
GridView控件在ASP.NET中被广泛用于展示数据集。无代码分页排序是指在不编写额外后端逻辑的情况下实现数据的分页显示和排序功能。这对于快速开发具有高度交互性的Web应用非常有用。 **实现细节:** - **...
GridView是ASP.NET中一个强大的数据展示控件,用于在网页上呈现结构化的数据,如数据库查询结果、XML数据或其他数据源。在这个“GridView总结的源代码”中,我们可以期待找到一系列关于如何有效利用GridView功能的...
GridView是ASP.NET中一个强大的数据展示控件,用于在网页上显示来自数据库或其他数据源的数据。这个"Gridview.rar"压缩包包含了一系列关于GridView的示例,帮助开发者深入理解和掌握其各种功能。以下是对这些知识点...