1.gridview的RowCreated事件可以控制每一行生的内容,包括表头
2.在生成表头行时,可以控制生成怎样的表头及其样式。
3.生成多行表头的关键是添加</tr><tr>对,有点类似于sql注入的方式.
4.表头的跨行跨列是能过其属性colspan、rowspan来设置的。
5.可以在表头增加各种控件,实现更多的功能。
protected
void
GridView1_RowCreated(
object
sender, GridViewRowEventArgs e)
... {
int i = 0;
int j = 0;
//今年的12个月
if (e.Row.RowType == DataControlRowType.Header)
...{
TableCellCollection tcHeader = e.Row.Cells;
tcHeader.Clear();//原有表头清空
tcHeader.Add(new TableHeaderCell());
//职位字段的表头
tcHeader[0].Attributes.Add("rowspan", "2"); //跨Row
tcHeader[0].CssClass = "locked";
Label lb = new Label();
lb.Text = "姓名";
lb.Width = 100;
tcHeader[0].Controls.Add(lb);
//第一行表头
for (i = 1; i <= 12 + years; i++)
...{
tcHeader.Add(new TableHeaderCell());
tcHeader[i].CssClass = "locked3";
tcHeader[i].Attributes.Add("colspan", Convert.ToString(num_type + 1)); //跨Column
if (i <= 12)
...{
tcHeader[i].Text = Convert.ToString(i) + "月";
}
else
if (i == 12 + years)
tcHeader[i].Text = Convert.ToString(PLAN_ID + i - 13) + "年合计</th></tr><tr style='color:White;background-color:#507CD1;font-weight:bold;'>";
else
tcHeader[i].Text = Convert.ToString(PLAN_ID + i - 13) + "年合计";
tcHeader[i].HorizontalAlign = HorizontalAlign.Center;
}
int start = 12 + years;//第二行表头开始的编号
//第二行表头
for (i = 1; i <= 12 + years; i++)
...{
tcHeader.Add(new TableHeaderCell());
tcHeader[start + 1].CssClass = "locked3";
tcHeader[start + 1].Text = "人数";
for (j = 1; j <= num_type; j++)
...{
tcHeader.Add(new TableHeaderCell());
tcHeader[start + 1 + j].CssClass = "locked3";
tcHeader[start + 1 + j].Text = "类型" + j.ToString();
}
start = start + num_type + 1;
}
}
//下面是每一行的控制,在这里是textbox,接受输入
if (e.Row.RowType == DataControlRowType.DataRow)
...{
for (i = 1; i <= 12 + years; i++)
...{
for (j = 0; j <= num_type; j++)
...{
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.Width = 60;
tc.Controls.Add(tb);
e.Row.Cells.Add(tc);
}
}
}
}
... {
int i = 0;
int j = 0;
//今年的12个月
if (e.Row.RowType == DataControlRowType.Header)
...{
TableCellCollection tcHeader = e.Row.Cells;
tcHeader.Clear();//原有表头清空
tcHeader.Add(new TableHeaderCell());
//职位字段的表头
tcHeader[0].Attributes.Add("rowspan", "2"); //跨Row
tcHeader[0].CssClass = "locked";
Label lb = new Label();
lb.Text = "姓名";
lb.Width = 100;
tcHeader[0].Controls.Add(lb);
//第一行表头
for (i = 1; i <= 12 + years; i++)
...{
tcHeader.Add(new TableHeaderCell());
tcHeader[i].CssClass = "locked3";
tcHeader[i].Attributes.Add("colspan", Convert.ToString(num_type + 1)); //跨Column
if (i <= 12)
...{
tcHeader[i].Text = Convert.ToString(i) + "月";
}
else
if (i == 12 + years)
tcHeader[i].Text = Convert.ToString(PLAN_ID + i - 13) + "年合计</th></tr><tr style='color:White;background-color:#507CD1;font-weight:bold;'>";
else
tcHeader[i].Text = Convert.ToString(PLAN_ID + i - 13) + "年合计";
tcHeader[i].HorizontalAlign = HorizontalAlign.Center;
}
int start = 12 + years;//第二行表头开始的编号
//第二行表头
for (i = 1; i <= 12 + years; i++)
...{
tcHeader.Add(new TableHeaderCell());
tcHeader[start + 1].CssClass = "locked3";
tcHeader[start + 1].Text = "人数";
for (j = 1; j <= num_type; j++)
...{
tcHeader.Add(new TableHeaderCell());
tcHeader[start + 1 + j].CssClass = "locked3";
tcHeader[start + 1 + j].Text = "类型" + j.ToString();
}
start = start + num_type + 1;
}
}
//下面是每一行的控制,在这里是textbox,接受输入
if (e.Row.RowType == DataControlRowType.DataRow)
...{
for (i = 1; i <= 12 + years; i++)
...{
for (j = 0; j <= num_type; j++)
...{
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.Width = 60;
tc.Controls.Add(tb);
e.Row.Cells.Add(tc);
}
}
}
}
效果: