當前位置:開發者網絡 >> 技術教程 >> .NET教程 >> 數據庫應用 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
關於DataGrid Web控件的熱門問題__連載之四
作者:未知
日期:2005-04-11
人氣:
投稿:(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
動態顯示和隱藏列&動態增加列 
——動態顯示隱藏列 
動態顯示列的一種方式就是在設計時創建它們,然後在需要時隱藏或顯示它們,可以通過設定列的Visible屬性來實現。下面的例子說明了如何控制DataGrid的第二列(索引為一的列)的可見性。 
 DataGrid1.Column[1].visible=!(DataGrid1.Column[1].visible); 
——動態增加列(這裡列都是由數據庫讀出的列) 
如果你事先知道需要哪些列,你可以隱藏或顯示它們,但是,有時你不到運行時是不知道需要哪些列的,在這種情況下,你可以動態創建列,並將其加入DataGrid中。 
實現的方法是創建一個DataGrid支持的列類型的一個實例——綁定列、按鈕列、或者超鏈接列(還可以添加模板列,但是稍微複雜些)。 
下例說明如何綁定兩個列到 DataGrid中: 
private void Button1_Click(object sender, System.EventArgs e) 

   DataGrid1.AutoGenerateColumns = false; 
   DataGrid1.DataSource = this.dsBooks1; 
   DataGrid1.DataMember = "Books"; 
   DataGrid1.DataKeyField = "bookid"; 

   // Add two columns 
   BoundColumn dgc_id = new BoundColumn(); 
   dgc_id.DataField = "bookid"; 
   dgc_id.HeaderText = "ID"; 
   dgc_id.ItemStyle.Width = new Unit(80); 
   DataGrid1.Columns.Add(dgc_id); 

   BoundColumn dgc_title= new BoundColumn(); 
   dgc_title.DataField = "title"; 
   dgc_title.HeaderText = "Title"; 
   DataGrid1.Columns.Add(dgc_title); 

   this.sqlDataAdapter1.Fill(this.dsBooks1); 
   DataGrid1.DataBind(); 

任何時候向列中動態增加控件,都會遇到如何保持的問題。動態增加的列並非自動地添加到page的視圖態,因此,你需要添加page的邏輯,使得在每次提交—回傳的過程中,列是可見的。 
實現上述問題的一個優秀的方法就是重載page的LoadViewState方法,它為我們提供了重新確定DataGrid控件中列的較早機會,因為該方法的調用是在Page_Load事件觸發之前。在LoadViewState中重新添加列保證了它們在任何事件代碼執行前,對正常的操作是可用的。 
下例展示了如何擴展上例使得每次page執行時都將列重新保存。和上例一樣,Button1_Click事件向DataGrid中添加了兩列(該例中,事件句柄調用了一個獨立的方法——AddColumns()來實現),而且,page還包含了一個簡單的布爾屬性,稱為DynamicColumnsAdded來指示DataGrid中是否有列動態增加。該屬性在視圖態下保存它的值。LoadViewState方法首先調用它的基類的LoadViewState方法,它摘錄視圖態信息並配置控件。如果列事先被添加到DataGrid中,該方法就再次添加它們。 
private bool DynamicColumnAdded{ 
   get 
   { 
      object b = ViewState["DynamicColumnAdded"]; 
      return (b == null) ? false : true; 
   } 
   set 
   { 
      ViewState["DynamicColumnAdded"] = value; 
   } 


protected override void LoadViewState(object savedState) 

   base.LoadViewState(savedState); 
   if (DynamicColumnAdded) 
   { 
      this.AddColumns(); 
   } 


private void Button1_Click(object sender, System.EventArgs e) 

   if(this.DynamicColumnAdded != true) 
   { 
      this.AddColumns(); 
   } 


private void AddColumns() 

   BoundColumn dgc_id = new BoundColumn(); 
   dgc_id.DataField = "bookid"; 
   dgc_id.HeaderText = "ID"; 
   dgc_id.ItemStyle.Width = new Unit(80); 
   DataGrid1.Columns.Add(dgc_id); 

   BoundColumn dgc_title= new BoundColumn(); 
   dgc_title.DataField = "title"; 
   dgc_title.HeaderText = "Title"; 
   DataGrid1.Columns.Add(dgc_title); 

   this.sqlDataAdapter1.Fill(this.dsBooks1); 
   DataGrid1.DataBind(); 
   this.DynamicColumnAdded = true; 

 (unfinished 所有代碼已經經過測試,只要獲得一個你自己的DataSet即可)
相關文章: