asp.net中GridView和DataGrid相同列合并实现代码

(一)普通列


代码如下:

/// <summary>
/// Gridview列的合并(普通列,不包含模板列)
/// 注意:1.GridView在绑定的时候进行分组和排序,才能让相同的行放在一起
/// 2.方法应用的时机,应该在Gridview的DataBound事件中使用
/// </summary>
/// <param name="gv">需要合并的GridView对象</param>
/// <param name="columnIndex">所要合并列的索引</param>
public static void UnitCell(GridView gv, int columnIndex)
{
int i = 0; //当前行数
string lastType = string.Empty; //当前判断是否合并行对应列的值
int lastCell = 0; //判断最后一个相同值的行的索引
if (gv.Rows.Count > 0)
{
lastType = gv.Rows[0].Cells[columnIndex].Text.ToString();
gv.Rows[0].Cells[columnIndex].RowSpan = 1;
lastCell = 0;
}
for (i = 1; i < gv.Rows.Count; i++)
{
if (gv.Rows[i].Cells[columnIndex].Text == lastType)
{
gv.Rows[i].Cells[columnIndex].Visible = false;
gv.Rows[lastCell].Cells[columnIndex].RowSpan++;
}
else
{
lastType = gv.Rows[i].Cells[columnIndex].Text.ToString();
lastCell = i;
gv.Rows[i].Cells[columnIndex].RowSpan = 1;
}
}
}
/// <summary>
/// DataGrid列的合并(普通列,不包含模板列)
/// 注意:1.DataGrid在绑定的时候进行分组和排序,才能让相同的行放在一起
/// 2.方法应用的时机,应该在DataGrid的DataBound事件中使用
/// </summary>
/// <param name="dg">需要合并的DataGrid对象</param>
/// <param name="columnIndex">所要合并列的索引</param>
public static void UnitCell_T(DataGrid dg, int columnIndex)
{
int i = 0; //当前行数
string lastType = string.Empty; //当前判断是否合并行对应列的值
int lastCell = 0; //判断最后一个相同值的行的索引
if (dg.Items.Count> 0)
{
lastType = dg.Items[0].Cells[columnIndex].Text.ToString();
dg.Items[0].Cells[columnIndex].RowSpan = 1;
lastCell = 0;
}
for (i = 1; i < dg.Items.Count; i++)
{
if (dg.Items[i].Cells[columnIndex].Text == lastType)
{
dg.Items[i].Cells[columnIndex].Visible = false;
dg.Items[lastCell].Cells[columnIndex].RowSpan++;
}
else
{
lastType = dg.Items[i].Cells[columnIndex].Text.ToString();
lastCell = i;
dg.Items[i].Cells[columnIndex].RowSpan = 1;
}
}
}

(二)模板列


代码如下:

/// <summary>
/// Gridview列的合并(模板列)
/// </summary>
/// <param name="gv">需要合并的GridView对象</param>
/// <param name="columnIndex">所要合并列的索引</param>
/// <param name="lblName">模板列对象的ID</param>
public static void UnitCell(GridView gv, int columnIndex, string lblName)
{
int i = 0; //当前行数
string lastType = string.Empty; //当前判断是否合并行对应列的值
int lastCell = 0; //判断最后一个相同值的行的索引
if (gv.Rows.Count > 0)
{
lastType = (gv.Rows[0].Cells[columnIndex].FindControl(lblName) as Label).Text;
gv.Rows[0].Cells[columnIndex].RowSpan = 1;
lastCell = 0;
}
for (i = 1; i < gv.Rows.Count; i++)
{
if ((gv.Rows[i].Cells[columnIndex].FindControl(lblName) as Label).Text == lastType)
{
gv.Rows[i].Cells[columnIndex].Visible = false;
gv.Rows[lastCell].Cells[columnIndex].RowSpan++;
}
else
{
lastType = (gv.Rows[i].Cells[columnIndex].FindControl(lblName) as Label).Text.ToString();
lastCell = i;
gv.Rows[i].Cells[columnIndex].RowSpan = 1;
}
}
}

(三)在DataBound事件中调用即可。

在GridView或DataGrid中显示固定宽度的列

默认情况下,Gridview和Datagrid控件依据它们的内容自动调整列大小。要为列指定固定宽度,设置每个Tablecell对象的Width属性并设置Wrap属性为False。下面的例子显示了如何通过使用DataGrid控件去做。


代码如下:

rotected void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)
{
ListItemType lit = e.Item.ItemType;
if (lit == ListItemType.Header)
{
for (int i = 0; i < e.Item.Cells.Count; i++)
{
e.Item.Cells[i].Width = Unit.Pixel(50);
e.Item.Cells[i].Wrap = false;
}
}
}

(0)

相关推荐

  • ASP.NET中GridView和Repeater重复数据如何合并

    这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下GridView 和 Repeater 关于重复数据合并的方法. 效果图如下 : GridView : 前台代码 : <div> <asp:GridView ID="gvIncome" runat="server" AutoGenerateColumns="False"> <Columns> <asp:TemplateFi

  • asp.net 合并GridView中某列相同信息的行(单元格)

                                            解决方法如下(写在公共模块里,定义为静态方法方便调用): 复制代码 代码如下: /// <summary> /// 合并GridView中某列相同信息的行(单元格) /// </summary> /// <param name="GridView1">GridView</param> /// <param name="cellNum"

  • ASP.NET GridView 实现课程表显示(动态合并单元格)实现步骤

    GridView,ASP.NET中很常用的数据显示控件,这里,我将用这个控件来实现课程表的显示.首先说说课程表的显示与普通记录的显示有何不同?这里所说的普通记录是指直接从数据库中查询出来的.没有经过任何处理的记录.通常,我们用GridView显示这些普通记录,只需直接将这些记录表绑定到GridView中即可.但是,课程表的显示可不是这么简单,它需要将普通记录继续加工,需要根据记录中具体的数据来确定数据需要显示在哪一行.哪一列,而且需要根据课程开始时间和结束时间动态合并单元格,最后才是数据的显示.

  • datalist,Repeater和Gridview的区别分析

    griview优点:功能最强大,提供分页,编辑,删除,选择等等很多功能,使用最方便,直接拖拽到页面上,建立新的数据源,点几下鼠标就可以维护一个表的浏览.删除和修改了,而且是分页的哦.(增加我还没搞明白怎么能点几下鼠标就实现,如果您知道请告诉我.).而且因为模板已经定制好,想自己灵活控制,不太容易. 缺点:占用系统资源大,他的分页是把整个表的数据取出来,到gridview上分页的,因此如果数据量比较大的时候,速度非常非常慢.效率极低. datalist比较好控制样式..没有自带的分页..编辑等..

  • ASP.NET MVC4之js css文件合并功能(3)

    MVC4增加了一些新功能,接下来,我们来研究下MVC4中的新增功能,我们在新建一个MVC4项目的时候,会发现在项目下多出了一个App_Start文件夹,文件夹下面有4个文件,BundleConfig.cs,FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs,其中BundleConfig.cs文件就是我们这一节要讲的的文件. 众所周知,浏览器在向服务器发送请求的时候,请求的文件连接数量是有限制的.使用BundleConfig可以将多个文件请求和并成一个请求

  • Asp.net程序优化js、css实现合并与压缩的方法

    本文实例讲述了Asp.net程序优化js.css实现合并与压缩的方法.分享给大家供大家参考.具体实现方法如下: 访问时将js和css压缩并且缓存在客户端, 采用的是Yahoo.Yui.Compressor组件来完成的,用户可以点击此处本站下载. 创建一个IHttpHandler来处理文件 复制代码 代码如下: public class CombineFiles : IHttpHandler {         private const string CacheKeyFormat = "_Cac

  • Asp.net_Table控件の单元格纵向合并示例

    业务需要,动态生成表,同一列中数据相同的单元格需要合并. 解决方案,创建Table控件处理类,代码如下: 复制代码 代码如下: /// <summary>表格控件相关操作类 /// </summary> public static class aspTable { /// <summary>合并行 /// </summary> /// <remarks>版权信息:http://www.qqextra.com,http://t.qq.com/ls_

  • repeater、gridview 在绑定时判断判断显示不同的行样式或文本

    一:repeater或DataList控件 1.更改纯文本内容等 如果数据库里学生信息表中的sex字段用0和1来表示男女 但我们想repeat控件绑定后性别显示男或女而不是显示0或1 方法一:当然我们可以在SQL语句里判断并且转换 select (case sex when 0 then '男' else '女' end) AS sex from studentInfo 方法二:就是用到repeat 控件ItemDataBound()事件 前台 复制代码 代码如下: <asp:Repearter

  • asp.net中rdlc 合并行的方法

    最终效果: 要合并内容行,我想是不可能的,我上网找了N久,也没找到,囧~ 后来经过自己的短暂思考,终于想到另一种合并了,:-) 实现方法很简单,就是在报表属性的代码里加上以下这段代码: 复制代码 代码如下: Function GetRemark(rowNum As Integer, remark As String) As String Dim cutLength As Integer = 10 Return Mid(remark, cutLength * (rowNum - 1) + 1, c

  • asp.net中让Repeater和GridView支持DataPager分页

    改造办法是自己写一个控件,让它继承GridView或Repeater,并实现IPageableItemContainer 接口.下面要发的是国外某高手写的代码,测试有效.具体使用的时候,要建一个类库项目,把代码编译成dll后,就可以添加到VS的工具箱里了! 一.自定义Repeater 复制代码 代码如下: using System.Web.UI; using System.Web.UI.WebControls; namespace WYJ.Web.Controls { /// <summary>

随机推荐