主體思路是這樣的,GridView在ASP.NET中最終是轉化為html的表格格式來顯示的,所以我們要在其中做點文章,
看下面這段代碼:
//在GridView的RowCreated事件中重寫表頭
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
判斷建立的行是不是標題列
if (e.Row.RowType == DataControlRowType.Header)
{
TableCellCollection tcl = e.Row.Cells;
//清除自動產生的表頭
tcl.Clear();
//添加新的表頭
tcl.Add(
new TableHeaderCell());
tcl[0].RowSpan = 2;
tcl[0].Text = "標題s";
Label l1 =
new Label();
l1.Text = "uu";
Button bt =
new
Button();
bt.Text = "1";
//因為自訂表格頭,所以原來系統中實現的排序功能就失效了
//下面語句可以自己在表頭中添加控制項,自己實現排序功能
tcl[0].Controls.Add(l1);
tcl[0].Controls.Add(bt);
tcl.Add(new TableHeaderCell());
tcl[1].ColumnSpan = 2;
tcl[1].Text = "標題2";
tcl.Add(new TableHeaderCell());
tcl[2].RowSpan = 2;
tcl[2].Text = "標題3";
tcl.Add(new TableHeaderCell());
tcl[3].ColumnSpan = 3;
tcl[3].Text = "標題4";
tcl.Add(new TableHeaderCell());
tcl[4].RowSpan = 2;
//這段是重點 其實在產生的html中tcl[4]轉化為<th>標題5</th>
//所以依照該原則注入html標籤來實現,原理有些類似於SQL注入攻擊
tcl[4].Text = "標題5</th></tr><tr><th>標題2-1</th><th>標題2-2</th><th>標題4-1</th><th>標題4-2</th><th>標題4-3";
}
}