📄 gridview 合并单元格.txt
字号:
1 /// <summary>
2 /// 合并GridView中某列相同信息的行(单元格)
3 /// </summary>
4 /// <param name="GridView1">GridView对象</param>
5 /// <param name="cellNum">需要合并的列</param>
6 public static void GroupRows(GridView GridView1, int cellNum)
7 {
8 int i = 0, rowSpanNum = 1;
9 while (i < GridView1.Rows.Count - 1)
10 {
11 GridViewRow gvr = GridView1.Rows[i];
12
13 for (++i; i < GridView1.Rows.Count; i++)
14 {
15 GridViewRow gvrNext = GridView1.Rows[i];
16 if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
17 {
18 gvrNext.Cells[cellNum].Visible = false;
19 rowSpanNum++;
20 }
21 else
22 {
23 gvr.Cells[cellNum].RowSpan = rowSpanNum;
24 rowSpanNum = 1;
25 break;
26 }
27
28 if (i == GridView1.Rows.Count - 1)
29 {
30 gvr.Cells[cellNum].RowSpan = rowSpanNum;
31 }
32 }
33 }
34 }
/// <summary>
/// 根据条件列合并GridView列中相同的行
/// </summary>
/// <param name="GridView1">GridView对象</param>
/// <param name="cellNum">需要合并的列</param>
/// /// 条件列(根据某条件列还合并)
public static void GroupRows(GridView GridView1, int cellNum, int cellNum2)
{
int i = 0, rowSpanNum = 1;
while (i < GridView1.Rows.Count - 1)
{
GridViewRow gvr = GridView1.Rows[i];
for (++i; i < GridView1.Rows.Count; i++)
{
GridViewRow gvrNext = GridView1.Rows[i];
if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)
{
gvrNext.Cells[cellNum].Visible = false;
rowSpanNum++;
}
else
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
rowSpanNum = 1;
break;
}
if (i == GridView1.Rows.Count - 1)
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
}
}
}
}
1 合并多列#region 合并多列
2 /**//// <summary>
3 /// GridView合并
4 /// </summary>
5 /// <param name="gdv">GridView</param>
6 /// <param name="startColumnIndex">起始列Index</param>
7 /// <param name="endColumnIndex">结束列Index</param>
8 public static void MergeGridViewRows(GridView gdv, int startColumnIndex, int endColumnIndex)
9 {
10 if (gdv == null || endColumnIndex < startColumnIndex || gdv.Rows.Count < 2)
11 return;
12 if (startColumnIndex < 0 || endColumnIndex > gdv.Columns.Count - 1)
13 throw new ArgumentOutOfRangeException("列Index超出GridView可用列的范围。");
14 EndColumnIndex = endColumnIndex;
15 MergeCellWithSubColumn(gdv, 0, 0, gdv.Rows.Count - 1);
16 }
17 private static int EndColumnIndex = 0;
18
19 /**//// <summary>
20 /// 合并当前列和后续列
21 /// </summary>
22 /// <param name="currentColumnIndex">当前列</param>
23 /// <param name="startRowIndex">起始行</param>
24 /// <param name="endRowIndex">结束行</param>
25 /// <summary>
26 private static void MergeCellWithSubColumn(GridView gdv, int currentColumnIndex, int startRowIndex, int endRowIndex)
27 {
28 if (currentColumnIndex > EndColumnIndex)//结束递归
29 return;
30 string preValue = GetCellValue(gdv,startRowIndex, currentColumnIndex);
31 string curValue = string.Empty;
32 int endIndex = startRowIndex;
33 for (int i = startRowIndex + 1; i <= endRowIndex + 1; i++)
34 {
35 if (i == endRowIndex + 1)
36 curValue = null;//完成最后一次合并
37 else
38 curValue = GetCellValue(gdv, i, currentColumnIndex);
39 if (curValue != preValue)
40 {
41 //合并当前列
42 MergeColumnCell(gdv, currentColumnIndex, endIndex, i - 1);
43 //合并后续列
44 MergeCellWithSubColumn(gdv, currentColumnIndex + 1, endIndex, i - 1);
45 endIndex = i;
46 preValue = curValue;
47 }
48 }
49 }
ASP.NET 2.0 GridView控件导出数据到Excel
较为完整的代码说明:
1.导出执行前必须将GridView控件的排序、分页功能去掉,导出成功后再设置回来
2.public override void VerifyRenderingInServerForm(Control control) 必须重载,确保控件被加载到
Form中,否则执行到 ctl.RenderControl(hw)这一行 时会出错。
protected void Button1_Click(object sender, EventArgs e)
{
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataBind();
ToExcel(GridView1, TextBox1.Text.Trim());
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.DataBind();
}
public static void ToExcel(Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -