關於DataGrid Web控制項的熱門問題

來源:互聯網
上載者:User
datagrid|web|控制項|問題 動態顯示和隱藏列&動態增加列 
——動態顯示隱藏列 
動態顯示列的一種方式就是在設計時建立它們,然後在需要時隱藏或顯示它們,可以通過設定列的Visible屬性來實現。下面的例子說明了如何控制DataGrid的第二列(索引為一的列)的可見度。 
 DataGrid1.Column[1].visible=!(DataGrid1.Column[1].visible); 
——動態增加列(這裡列都是由資料庫讀出的列) 
如果你事Crowdsourced Security Testing道需要哪些列,你可以隱藏或顯示它們,但是,有時你不到運行時是不知道需要哪些列的,在這種情況下,你可以動態建立列,並將其加入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即可)

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。