如何給DataGrid添加雙題頭分類顯示
發(fā)表時間:2024-05-24 來源:明輝站整理相關軟件相關文章人氣:
[摘要]我在寫PowerDataGrid想到要提供一個查詢(有關PowerDataGrid的詳細信息參考CSDN論壇中的討論帖,源碼可以在www.foxhis.com/powermjtest/sharepowerdatagrid.rar下載),該查詢的構想是這樣的:我的這個控件可以通過指定一個SQL語句來...
我在寫PowerDataGrid想到要提供一個查詢(有關PowerDataGrid的詳細信息參考CSDN論壇中的討論帖,源碼可以在www.foxhis.com/powermjtest/sharepowerdatagrid.rar下載),該查詢的構想是這樣的:我的這個控件可以通過指定一個SQL語句來顯示該語句的內容(其他的功能不敘述了,這不是重點),那么我可以封裝一組UI到這個控件里面來實現(xiàn)查詢的功能,問題出來了,這個查詢通常情況下應該在DataGrid的上面也就是查詢結果的上面,我要怎么才能保留原來的題頭同時再添加一個題頭呢(雙題頭)? 問題出來了,改如何解決呢?想了好多辦法都不行,如果要將Header重畫,那么還要處理排序是前后臺的交互問題,那么只能再保留原來Header不動的基礎上添加新的Header。無意中發(fā)現(xiàn)在分頁的時候可以有幾種分頁顯示的方法,在分頁面板里面有一個選現(xiàn)可以選擇分頁的位置,可以選擇上下型,在選擇這個類型的時候DataGrid在原來的Header上面又多了一行,我們今天就利用這一行來完成我們的任務,今天我們不產生查詢的UI而是產生一個分類的題頭,我們使用測試數(shù)據庫Northwind中的Employees來顯示數(shù)據,首先我們要做的是綁定數(shù)據綁定代碼如下: SqlConnection con = new SqlConnection("server=localhost;database=Northwind;uid=sa;pwd=;");
SqlDataAdapter da = new SqlDataAdapter("SELECT LastName+' '+FirstName as name, BirthDate, Country, Title, HireDate FROM Employees",con);
DataTable dt = new DataTable();
da.Fill(dt);
this.DataGrid1.DataSource = dt;
this.DataGrid1.DataBind();
} 接著我們在ItemCreated里面添加適當?shù)拇a來完成我們的任務,在PowerDataGrid該事件處理函數(shù)里面已經添加了創(chuàng)建一個自定義分頁的UI!如果你在PowerDataGrid里面添加需要判斷兩個(上下)Pager的位置,我們可以使用一個全局變量來判斷。 定義一個全局變量 private int m_CreatePageTimes = 0;
然后我們?yōu)樵撌录幚砗瘮?shù)添加如下代碼: private int m_CreatePageTimes = 0;
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
ListItemType elemType = e.Item.ItemType;
if (elemType == ListItemType.Pager) {
if (m_CreatePageTimes == 0) {
TableCell cellPerson = (TableCell) e.Item.Controls[0];
cellPerson.Controls.Clear();cellPerson.BackColor = Color.Navy;
cellPerson.ForeColor = Color.Yellow;
cellPerson.ColumnSpan = 3;
cellPerson.HorizontalAlign = HorizontalAlign.Center;
cellPerson.Controls.Add(new LiteralControl("個人信息"));
TableCell cellJob = new TableCell();
cellJob.BackColor = Color.Navy;
cellJob.ForeColor = Color.Yellow;
cellJob.ColumnSpan = 2;
cellJob.HorizontalAlign = HorizontalAlign.Center;
cellJob.Controls.Add(new LiteralControl("工作信息"));
e.Item.Controls.Add(cellJob);
m_CreatePageTimes ++;
}else if(m_CreatePageTimes ==1){
// create custom pager UI
}
} 最后是DataGrid的HTML部分的代碼如下:
<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True" AutoGenerateColumns="False" Width="100%"
PageSize="2">
<Columns>
<asp:BoundColumn DataField="name" HeaderText="姓名"></asp:BoundColumn>
<asp:BoundColumn DataField="BirthDate" HeaderText="生日"></asp:BoundColumn>
<asp:BoundColumn DataField="Country" HeaderText="國家"></asp:BoundColumn>
<asp:BoundColumn DataField="Title" HeaderText="頭銜"></asp:BoundColumn>
<asp:BoundColumn DataField="HireDate" HeaderText="雇傭日期"></asp:BoundColumn>
</Columns>
<PagerStyle Position="TopAndBottom" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
運行效果如下所示: