我在寫PowerDataGrid想到要提供一個查詢,該查詢的構想是這樣的:我的這個控件可以通過指定一個SQL語句來顯示該語句的內容(其他的功能不敘述了,這不是重點),那麼我可以封裝一組UI到這個控件裡面來實現查詢的功能,問題出來了,這個查詢通常情況下應該在DataGrid的上面也就是查詢結果的上面,我要怎麼才能保留原來的題頭同時再添加一個題頭呢(雙題頭)?
問題出來了,改如何解決呢?想了好多辦法都不行,如果要將Header重畫,那麼還要處理排序是前後台的交互問題,那麼只能再保留原來Header不動的基礎上添加新的Header。無意中發現在分頁的時候可以有幾種分頁顯示的方法,在分頁面板裡面有一個選現可以選擇分頁的位置,可以選擇上下型,在選擇這個類型的時候DataGrid在原來的Header上面又多了一行,我們今天就利用這一行來完成我們的任務,今天我們不產生查詢的UI而是產生一個分類的題頭,我們使用測試數據庫Northwind中的Employees來顯示數據,首先我們要做的是綁定數據綁定代碼如下:
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裡面添加適當的代碼來完成我們的任務,在PowerDataGrid該事件處理函數裡面已經添加了創建一個自定義分頁的UI!如果你在PowerDataGrid裡面添加需要判斷兩個(上下)Pager的位置,我們可以使用一個全局變量來判斷。
定義一個全局變量 private int m_CreatePageTimes = 0;
然後我們為該事件處理函數添加如下代碼:
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>