我在寫PowerDataGrid想到要提供一個查詢(有關PowerDataGrid的詳細信息參考CSDN論壇中的討論帖,源碼可以在www.foxhis.com/powermjtest/sharepowerdatagrid.rar下載),該查詢的構想是這樣的:我的這個控件可以通過指定一個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>
運行效果如下所示:

|