動態的管理ASP.NET DataGrid數據列
2024-07-10 12:58:02
供稿:網友
 
在asp.net的datagrid數據顯示控件編程中,我們有幾種方式可以增加datagrid columns。其中最常見的方法是在web forms設計器中增加,通過在控件工具箱中拖訪datagrid控件到web設計頁面,然后在屬性生成器中增加columns列;還有一種方式就是在html視圖模式下更改html代碼的方式增加columns列。但是這兩種方式都是在設計時進行的,一旦設計完成就無法更改。其實我們也可以在程序運行時動態的增加或者刪除columns列。在這篇文章中,我將向大家介紹如何編程實現在運行時動態的增加和刪除columns列,其實是通過隱藏或者現實columns列來實現的。
  datagrid 的columns屬性是訪問datagrid columns的關鍵所在。訪問這個屬性返回的是datagridcolumncollection這樣的一個集合對象,它包含了所有的datagrigcolumn對象。datagridcolumncollection提供了增加一個datagrigcolumn對象和刪除一個已經存在的datagrigcolumn對象的方法。,我們將使用datagridcolumncollection的add方法來增加一個datagrigcolumn對象,從而在運行時動態的增加一列到datagrid中去。一個datagrigcolumn代表datagrid的一列,datagrid的visible屬性用來顯示或者隱藏一個列。
  好了,下面讓大家跟我一起來創建一個dynamicdatagrid的c#的asp.net的工程,他有隱藏和顯示datagrid 的每一列的選項。
  在我用vs.net創建的web application里面,我在設計頁面上拖放了一個panel 控件。在這個panel控件上,我放置了一個datagrid控件,一個dropdownlist控件,兩個button控件用于改變datagrid控件的屬性。
  現在我們開始創建兩個方法:filldatagrid()和fillcolumnslist()方法。filldatagrid()用于增加一個列到datagrid控件和用dataset數據源來填充它。在這里的我是通過db.getdataset()方法來獲取dataset的。大家可以參照附加的源代碼文件(db.cs)獲取更多的細節。
  下面的代碼說明了createdatagrid()的實現。從代碼中可以看出,我創建了三個列,用boundcolumn的datafield屬性綁定到dataset的id,name和address字段。boundcolumn類繼承自datagridcolumn類。
private void createdatagrid()
{
// set datagrid properties
datagrid1.autogeneratecolumns = false;
// get a dataset object filled with data
dataset ds = db.getdataset();
// create id column & add to datagrid
boundcolumn col = new boundcolumn();
col.headertext="user id"; 
col.datafield="id";
datagrid1.columns.add(col); 
// create name column & add to datagrid
col = new boundcolumn();
col.headertext="user name"; 
col.datafield="name";
datagrid1.columns.add(col); 
// create address column & add to datagrid
col = new boundcolumn();
col.headertext="user address"; 
col.datafield="address";
datagrid1.columns.add(col); 
// datagrid data binding
datagrid1.datasource = ds.tables[0];
datagrid1.databind();
} 
 
  fillcolumnslist()方法只是簡單的從datagrid中讀取列名,并且將這些列(columns)名填充到dropdownlist控件的下拉列表中去。我們將使用dropdownlist控件來選取隱藏或者顯示的列。
private void fillcolumnslist(datagrid grid)
{
foreach (datagridcolumn col in grid.columns)
{
columnslist.items.add(col.headertext);
}
} 
  接著我們來添加hidedatagridcolumn()方法來具體的通過index索引和bool值兩個參數來顯示或者隱藏一個列。在這里,我僅僅是簡單的設置columns列的visible屬性為true或者false.
private void hidedatagridcolumn(int index, bool show)
{
datagrid1.columns[index].visible = show; 
} 
  最后的工作就是增加show column和hide column的單擊事件處理。正如我們在代碼中看到的一樣,我只是簡單的調用hidedatagridcolumn()方法來顯示或者隱藏列,當然要傳入參數了。
private void hidecolumnbtn_click(object sender, system.eventargs e)
{
hidedatagridcolumn(columnslist.selectedindex, false);
this.databind();
}
private void showcolumnbtn_click(object sender, system.eventargs e)
{
hidedatagridcolumn(columnslist.selectedindex, true);
this.databind(); 
} 
  ok,所有的工作都結束了,我們看看運行的結果如何。你可以通過下拉列表來選擇要隱藏或者顯示的列,并且只需單擊show或者hide按鈕即可。