明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

如何給DataGrid添加雙題頭分類顯示

[摘要]我在寫PowerDataGrid想到要提供一個查詢(有關(guān)PowerDataGrid的詳細(xì)信息參考CSDN論壇中的討論帖,源碼可以在www.foxhis.com/powermjtest/sharepowerdatagrid.rar下載),該查詢的構(gòu)想是這樣的:我的這個控件可以通過指定一個SQL語句來...

我在寫PowerDataGrid想到要提供一個查詢(有關(guān)PowerDataGrid的詳細(xì)信息參考CSDN論壇中的討論帖,源碼可以在www.foxhis.com/powermjtest/sharepowerdatagrid.rar下載),該查詢的構(gòu)想是這樣的:我的這個控件可以通過指定一個SQL語句來顯示該語句的內(nèi)容(其他的功能不敘述了,這不是重點),那么我可以封裝一組UI到這個控件里面來實現(xiàn)查詢的功能,問題出來了,這個查詢通常情況下應(yīng)該在DataGrid的上面也就是查詢結(jié)果的上面,我要怎么才能保留原來的題頭同時再添加一個題頭呢(雙題頭)?    問題出來了,改如何解決呢?想了好多辦法都不行,如果要將Header重畫,那么還要處理排序是前后臺的交互問題,那么只能再保留原來Header不動的基礎(chǔ)上添加新的Header。無意中發(fā)現(xiàn)在分頁的時候可以有幾種分頁顯示的方法,在分頁面板里面有一個選現(xiàn)可以選擇分頁的位置,可以選擇上下型,在選擇這個類型的時候DataGrid在原來的Header上面又多了一行,我們今天就利用這一行來完成我們的任務(wù),今天我們不產(chǎn)生查詢的UI而是產(chǎn)生一個分類的題頭,我們使用測試數(shù)據(jù)庫Northwind中的Employees來顯示數(shù)據(jù),首先我們要做的是綁定數(shù)據(jù)綁定代碼如下:  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里面添加適當(dāng)?shù)拇a來完成我們的任務(wù),在PowerDataGrid該事件處理函數(shù)里面已經(jīng)添加了創(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>

  運(yùn)行效果如下所示: