GridView合并行头代码
只能合并出一个头
图:
Code
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = GenerateData();
GridView1.DataBind();
}
}
private DataTable GenerateData()
{
DataTable oDT = new DataTable();
DataColumn odc = new DataColumn();
odc.ColumnName = "UserName";
odc.DataType = typeof(System.String);
oDT.Columns.Add(odc);
oDT.Columns.Add("StudentNo");
oDT.Columns[1].DataType = typeof(System.Int32);
oDT.Columns.Add("语文");
oDT.Columns[2].DataType = typeof(System.Int32);
oDT.Columns.Add("英语");
oDT.Columns.Add("历史");
oDT.Columns.Add("数学");
oDT.Columns.Add("物理");
oDT.Columns.Add("政治");
DataRow oDR = oDT.NewRow();
oDR["UserName"] = "张三";
oDR[1] = 10001;
oDR["语文"] = 88;
oDR["英语"] = 97.8;
oDR["历史"] = 68;
oDR["数学"] = 75;
oDR["物理"] = 94;
oDR["政治"] = 72;
oDT.Rows.Add(oDR);
DataRow oDR1 = oDT.NewRow();
oDR1["UserName"] = "李四";
oDR1[1] = 10002;
oDR1["语文"] = 87;
oDR1["英语"] = 75.6;
oDR1["历史"] = 97;
oDR1["数学"] = 46;
oDR1["物理"] = 86;
oDR1["政治"] = 45;
oDT.Rows.Add(oDR1);
oDT.AcceptChanges();
return oDT;
}
int iMergeBegin, iMergeEnd;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow oRow = e.Row;
iMergeBegin = 2;
iMergeEnd = 4;
if (e.Row.RowType == DataControlRowType.Header)
{
GroupHeader(oRow, iMergeBegin, iMergeEnd, "文 科");
}
}
protected void GroupHeader(TableRow oHeader, int iStartIndex, int iEndIndex, string sParentHeaderName)
{
for (int i = 0; i < oHeader.Cells.Count; i++)
{
if (i < iStartIndex || i > iEndIndex)
{
oHeader.Cells[i].RowSpan = 2;
}
}
for (int i = GridView1.Columns.Count - 1; i >= 0; i--)
{
if (GridView1.Columns[i].Visible == true)
{
if (oHeader.Cells[i].Text != "")
{
oHeader.Cells[i].Text += "</th></tr><tr>";
}
else
{
oHeader.Cells[i].Controls.Add(new LiteralControl("</th></tr><tr>"));
}
break;
}
}
TableHeaderCell oHeaderCell = new TableHeaderCell();
oHeaderCell.Text = sParentHeaderName;
oHeaderCell.ColumnSpan = iEndIndex - iStartIndex + 1;
oHeader.Cells.AddAt(iStartIndex, oHeaderCell);
List<TableCell> aCellList = new List<TableCell>();
for (int i = 0; i < iEndIndex - iStartIndex + 1; i++)
{
aCellList.Add(oHeader.Cells[iStartIndex + 1]);
oHeader.Cells.RemoveAt(iStartIndex + 1);
}
oHeader.Cells.AddRange(aCellList.ToArray());
}
下载
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = GenerateData();
GridView1.DataBind();
}
}
private DataTable GenerateData()
{
DataTable oDT = new DataTable();
DataColumn odc = new DataColumn();
odc.ColumnName = "UserName";
odc.DataType = typeof(System.String);
oDT.Columns.Add(odc);
oDT.Columns.Add("StudentNo");
oDT.Columns[1].DataType = typeof(System.Int32);
oDT.Columns.Add("语文");
oDT.Columns[2].DataType = typeof(System.Int32);
oDT.Columns.Add("英语");
oDT.Columns.Add("历史");
oDT.Columns.Add("数学");
oDT.Columns.Add("物理");
oDT.Columns.Add("政治");
DataRow oDR = oDT.NewRow();
oDR["UserName"] = "张三";
oDR[1] = 10001;
oDR["语文"] = 88;
oDR["英语"] = 97.8;
oDR["历史"] = 68;
oDR["数学"] = 75;
oDR["物理"] = 94;
oDR["政治"] = 72;
oDT.Rows.Add(oDR);
DataRow oDR1 = oDT.NewRow();
oDR1["UserName"] = "李四";
oDR1[1] = 10002;
oDR1["语文"] = 87;
oDR1["英语"] = 75.6;
oDR1["历史"] = 97;
oDR1["数学"] = 46;
oDR1["物理"] = 86;
oDR1["政治"] = 45;
oDT.Rows.Add(oDR1);
oDT.AcceptChanges();
return oDT;
}
int iMergeBegin, iMergeEnd;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow oRow = e.Row;
iMergeBegin = 2;
iMergeEnd = 4;
if (e.Row.RowType == DataControlRowType.Header)
{
GroupHeader(oRow, iMergeBegin, iMergeEnd, "文 科");
}
}
protected void GroupHeader(TableRow oHeader, int iStartIndex, int iEndIndex, string sParentHeaderName)
{
for (int i = 0; i < oHeader.Cells.Count; i++)
{
if (i < iStartIndex || i > iEndIndex)
{
oHeader.Cells[i].RowSpan = 2;
}
}
for (int i = GridView1.Columns.Count - 1; i >= 0; i--)
{
if (GridView1.Columns[i].Visible == true)
{
if (oHeader.Cells[i].Text != "")
{
oHeader.Cells[i].Text += "</th></tr><tr>";
}
else
{
oHeader.Cells[i].Controls.Add(new LiteralControl("</th></tr><tr>"));
}
break;
}
}
TableHeaderCell oHeaderCell = new TableHeaderCell();
oHeaderCell.Text = sParentHeaderName;
oHeaderCell.ColumnSpan = iEndIndex - iStartIndex + 1;
oHeader.Cells.AddAt(iStartIndex, oHeaderCell);
List<TableCell> aCellList = new List<TableCell>();
for (int i = 0; i < iEndIndex - iStartIndex + 1; i++)
{
aCellList.Add(oHeader.Cells[iStartIndex + 1]);
oHeader.Cells.RemoveAt(iStartIndex + 1);
}
oHeader.Cells.AddRange(aCellList.ToArray());
}