关于Gridview控件合并某2列相同信息的问题

kukukey 2009-11-11 10:49:13
GridView控件显示Footer
网上找了个合并一列相同信息的事件GridView1_DataBound等。发现Footer也被合并进去了。

protected void GridView1_DataBound(object sender, EventArgs e)
{
int row = 0;
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {

if (GridView1.Rows[row].Cells[1].RowSpan == 0)
{
GridView1.Rows[row].Cells[0].RowSpan++;
}

GridView1.Rows[row].Cells[0].RowSpan++;
GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
row = i;
}

}

现在我需要分别合并第一列和第二列中相同信息的行,第一列都是一样的信息合并成一大块,第二列是三三二二的合并在一起的。求教下如何解决,自己测试了下发现有了FOOTER后,合并下有点凌乱的。

...全文
337 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
有创服务 2009-12-24
  • 打赏
  • 举报
回复
顶啊!这样问题就是好啊!
caobingyi 2009-11-11
  • 打赏
  • 举报
回复
有图,看见了!搬个板凳来学习!
kukukey 2009-11-11
  • 打赏
  • 举报
回复

就是这个效果。有图不?
kukukey 2009-11-11
  • 打赏
  • 举报
回复
晕。不会贴图。。。。粘上来的的提交下就乱了
kukukey 2009-11-11
  • 打赏
  • 举报
回复
页眉 页眉 页眉 页眉
老大 老一 1 3
2 3
老二 3 3
4 3
5 3
老三 6 3
7 3
8 3
9 3
10 3
11 3
页脚 页脚 页脚 页脚
fhjzgsy 2009-11-11
  • 打赏
  • 举报
回复

这个是用vs2003的时候写的,现在第三方控件里就有属性合并同样的行了,gridview就没写对应的,你可以把下面的DataGrid1.Items都换成Gridview.Rows用,
private void SpanGrid()
{
int j=DataGrid1.Items.Count;//行数
int u;//自循环所用参数
for (int i = 0;i<j;i++)
{
int inRowSpan = 1;//跨行数
string ItmStr = DataGrid1.Items[i].Cells[0].Text.ToString();
for(u = i+1;u<j;u++)
{
if (ItmStr.Equals(DataGrid1.Items[u].Cells[0].Text.ToString()))
{
inRowSpan += 1;
DataGrid1.Items[i].Cells[0].RowSpan = inRowSpan;//对最歪层所循环行赋要跨行数
DataGrid1.Items[u].Cells[0].Visible = false;//当前被跨行不可见
}
else
{
break;
}
}
i = u - 1;
}
}

看有帮助没有
阿非 2009-11-11
  • 打赏
  • 举报
回复
给点数据,贴个你想要的效果图
kukukey 2009-11-11
  • 打赏
  • 举报
回复
现在的问题是我想2列分别做合并相同行,这个需要怎么写呢。
判断不是页脚,能够解决合并后的凌乱。
阿非 2009-11-11
  • 打赏
  • 举报
回复
e.RowType!=DataControlRowType.Footer
阿非 2009-11-11
  • 打赏
  • 举报
回复
判断 当前行 不是 页脚
kukukey 2009-11-11
  • 打赏
  • 举报
回复
caobingyi 2009-11-11
  • 打赏
  • 举报
回复
up
阿非 2009-11-11
  • 打赏
  • 举报
回复
贴一下 你想要的效果图
kukukey 2009-11-11
  • 打赏
  • 举报
回复
非常感谢 阿非大哥。
能不能在牛逼点。我另开帖子给分!不想在这个帖子加分了。能不能以第一列为首要,第1列的合并为第2列合并的基础。如图cc这个值,既属于A又属于B且相邻在一起,两个值需要以第一列为标准进行区分。
caobingyi 2009-11-11
  • 打赏
  • 举报
回复
如果,给gridview用了皮肤,有些行就分不清楚,粘在一起
caobingyi 2009-11-11
  • 打赏
  • 举报
回复
        int row = 0;   
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {

GridView1.Rows[row].Cells[0].RowSpan++;

GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
GridView1.Rows[row].Cells[0].RowSpan++;
row = i;
}

}
GridView1.Rows[row].Cells[0].RowSpan++;



这样可以吗?
阿非 2009-11-11
  • 打赏
  • 举报
回复

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="gv" runat="server" onprerender="gv_PreRender"></asp:GridView>
</form>
</body>
</html>



int mergeCount = 2; //前两列合并

private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(String)));
dt.Columns.Add(new DataColumn("Sex", typeof(String)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "0101";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "0101";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "01011";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "01";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "01001";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "01001";
dr[2] = "女";
dt.Rows.Add(dr);
return dt;
}


protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gv.DataSource = GetDataTable();
gv.DataBind();
}
}

protected void gv_PreRender(object sender, EventArgs e)
{
for (int rowIndex = gv.Rows.Count - 2; rowIndex >= 0; rowIndex--)
{
GridViewRow row = gv.Rows[rowIndex];
GridViewRow previousRow = gv.Rows[rowIndex + 1];

for (int i = 0; i < row.Cells.Count && i < mergeCount; i++)
{
if (row.Cells[i].Text == previousRow.Cells[i].Text)
{
row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
previousRow.Cells[i].RowSpan + 1;
previousRow.Cells[i].Visible = false;
}
}
}

}
控件使用
1、鼠标经过行的时候改变该行的样式,鼠标离开行的时候恢复该行的样式
使用方法(设置属性):
MouseOverCssClass - 鼠标经过行时行的 CSS 类名

2、对多个字段进行复合排序;升序、降序的排序状态提示
使用方法(设置SmartSorting复合属性):
AllowSortTip - 是否启用排序提示
AllowMultiSorting - 是否启用复合排序
SortAscImageUrl - 升序提示图片的URL(不设置则使用默认图片)
SortDescImageUrl - 降序提示图片的URL(不设置则使用默认图片)
SortAscText - 升序提示文本
SortDescText - 降序提示文本

3、根据按钮的CommandName设置其客户端属性
使用方法(设置ClientButtons集合属性):
BoundCommandName - 需要绑定的CommandName
AttributeKey - 属性的名称
AttributeValue - 属性的值(两个占位符:{0} - CommandArgument;{1} - Text)
Position - 属性的值的位置

4、联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置指定的所有子复选框为选中状态;取消选中指定的父复选框,则设置指定的所有子复选框为取消选中状态。如果指定的所有子复选框为均选中状态,则设置指定的父复选框为选中状态;如果指定的所有子复选框至少有一个为取消选中状态,则设置指定的父复选框为取消选中状态
使用方法(设置CascadeCheckboxes集合属性):
ParentCheckboxID - 模板中 父复选框ID
ChildCheckboxID - 模板中 子复选框ID
YYControls.Helper.SmartGridView中的静态方法
List GetCheckedDataKey(GridView gv, int columnIndex)
List GetCheckedDataKey(GridView gv, string checkboxId)

5、固定指定行、指定,根据RowType固定行,根据RowState固定行
使用方法(设置FixRowColumn复合属性):
FixRowType - 需要固定的行的RowType(用逗号“,”分隔)
FixRowState - 需要固定的行的RowState(用逗号“,”分隔)
FixRows - 需要固定的行的索引(用逗号“,”分隔)
FixColumns - 需要固定的的索引(用逗号“,”分隔)
TableWidth - 表格的宽度
TableHeight - 表格的高度

6、响应行的单击事件和双击事件,并在服务端处理
使用方法(设置属性):
BoundRowClickCommandName - 行的单击事件需要绑定的CommandName
BoundRowDoubleClickCommandName - 行的双击事件需要绑定的CommandName

7、行的指定复选框选中的时候改变该行的样式,行的指定复选框取消选中的时候恢复该行的样式
使用方法(设置CheckedRowCssClass复合属性):
CheckBoxID - 模板中 数据行的复选框ID
CssClass - 选中的行的 CSS 类名

8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为DataTable或DataSet)
使用方法:
为SmartGridView添加的方法
Export(string fileName)
Export(string fileName, ExportFormat exportFormat)
Export(string fileName, ExportFormat exportFormat, Encoding encoding)
Export(string fileName, int[] columnIndexList, ExportFormat exportFormat, Encoding encoding)
Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding)

9、给数据行增加右键菜单,响应服务端事件或超级链接
使用方法(设置ContextMenus集合属性):
Text - 菜单的文本内容
BoundCommandName - 需要绑定的CommandName
NavigateUrl - 链接的URL
Target - 链接的目标窗口或框架
SmartGridView的属性ContextMenuCssClass - 右键菜单的级联样式表 CSS 类名(右键菜单的结构div ul li a)

10、自定义分页样式。显示总记录数、每页记录数、当前页数、总页数、首页、上一页、下一页、末页和分页按钮
使用方法(设置CustomPagerSettings复合属性):
PagingMode - 自定义分页的显示模式
TextFormat - 自定义分页的文本显示样式(四个占位符:{0}-每页显示记录数;{1}-总记录数;{2}-当前页数;{3}-总页数)

11、合并指定的相邻且内容相同的单元格
使用方法(设置属性):
MergeCells - 需要合并单元格的的索引(用逗号“,”分隔)
控件使用 1、鼠标经过行的时候改变该行的样式,鼠标离开行的时候恢复该行的样式 使用方法(设置属性): MouseOverCssClass - 鼠标经过行时行的 CSS 类名 2、对多个字段进行复合排序;升序、降序的排序状态提示 使用方法(设置SmartSorting复合属性): AllowSortTip - 是否启用排序提示 AllowMultiSorting - 是否启用复合排序 SortAscImageUrl - 升序提示图片的URL(不设置则使用默认图片) SortDescImageUrl - 降序提示图片的URL(不设置则使用默认图片) SortAscText - 升序提示文本 SortDescText - 降序提示文本 3、根据按钮的CommandName设置其客户端属性 使用方法(设置ClientButtons集合属性): BoundCommandName - 需要绑定的CommandName AttributeKey - 属性的名称 AttributeValue - 属性的值(两个占位符:{0} - CommandArgument;{1} - Text) Position - 属性的值的位置 4、联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置指定的所有子复选框为选中状态;取消选中指定的父复选框,则设置指定的所有子复选框为取消选中状态。如果指定的所有子复选框为均选中状态,则设置指定的父复选框为选中状态;如果指定的所有子复选框至少有一个为取消选中状态,则设置指定的父复选框为取消选中状态 使用方法(设置CascadeCheckboxes集合属性): ParentCheckboxID - 模板中 父复选框ID ChildCheckboxID - 模板中 子复选框ID CashBox.Helper.WebGrid中的静态方法 List GetCheckedDataKey(GridView gv, int columnIndex) List GetCheckedDataKey(GridView gv, string checkboxId) 5、固定指定行、指定,根据RowType固定行,根据RowState固定行 使用方法(设置FixRowColumn复合属性): FixRowType - 需要固定的行的RowType(用逗号“,”分隔) FixRowState - 需要固定的行的RowState(用逗号“,”分隔) FixRows - 需要固定的行的索引(用逗号“,”分隔) FixColumns - 需要固定的的索引(用逗号“,”分隔) TableWidth - 表格的宽度 TableHeight - 表格的高度 6、响应行的单击事件和双击事件,并在服务端处理 使用方法(设置属性): BoundRowClickCommandName - 行的单击事件需要绑定的CommandName BoundRowDoubleClickCommandName - 行的双击事件需要绑定的CommandName 7、行的指定复选框选中的时候改变该行的样式,行的指定复选框取消选中的时候恢复该行的样式 使用方法(设置CheckedRowCssClass复合属性): CheckBoxID - 模板中 数据行的复选框ID CssClass - 选中的行的 CSS 类名 8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为DataTable或DataSet) 使用方法: 为WebGrid添加的方法 Export(string fileName) Export(string fileName, ExportFormat exportFormat) Export(string fileName, ExportFormat exportFormat, Encoding encoding) Export(string fileName, int[] columnIndexList, ExportFormat exportFormat, Encoding encoding) Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding) Export(string fileName, string[] columnNameList, ExportFormat exportFormat, Encoding encoding) Export(string fileName, strin

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧