直播中
DataGrid 的Columns屬性是訪問datagrid Columns的關(guān)鍵所在。訪問這個屬性返回的是DataGridColumnCollection這樣的一個集合對象,它包含了所有的DataGrigColumn對象。DataGridColumnCollection提供了增加一個DataGrigColumn對象和刪除一個已經(jīng)存在的DataGrigColumn對象的方法。,我們將使用DataGridColumnCollection的Add方法來增加一個DataGrigColumn對象,從而在運(yùn)行時動態(tài)的增加一列到DataGrid中去。一個DataGrigColumn代表DataGrid的一列,DataGrid的Visible屬性用來顯示或者隱藏一個列。
好了,下面讓大家跟我一起來創(chuàng)建一個DynamicDataGrid的C#的ASP.NET的工程,他有隱藏和顯示DataGrid 的每一列的選項(xiàng)。
在我用VS.NET創(chuàng)建的web application里面,我在設(shè)計(jì)頁面上拖放了一個Panel 控件。在這個panel控件上,我放置了一個DataGrid控件,一個DropDownList控件,兩個Button控件用于改變DataGrid控件的屬性。最后的設(shè)計(jì)界面看起來是下圖這樣的。
現(xiàn)在我們開始創(chuàng)建兩個方法:FillDataGrid()和FillColumnsList()方法。FillDataGrid()用于增加一個列到DataGrid控件和用DataSet數(shù)據(jù)源來填充它。在這里的我是通過DB.GetDataSet()方法來獲取DataSet的。大家可以參照附加的源代碼文件(DB.CS)獲取更多的細(xì)節(jié)。
下面的代碼說明了CreateDataGrid()的實(shí)現(xiàn)。從代碼中可以看出,我創(chuàng)建了三個列,用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值兩個參數(shù)來顯示或者隱藏一個列。在這里,我僅僅是簡單的設(shè)置Columns列的Visible屬性為true或者false.
private void HideDataGridColumn(int index, bool show)
{
DataGrid1.Columns[index].Visible = show;
}
最后的工作就是增加Show Column和Hide Column的單擊事件處理。正如我們在代碼中看到的一樣,我只是簡單的調(diào)用HideDataGridColumn()方法來顯示或者隱藏列,當(dāng)然要傳入?yún)?shù)了。
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,所有的工作都結(jié)束了,我們看看運(yùn)行的結(jié)果如何。你可以通過下拉列表來選擇要隱藏或者顯示的列,并且只需單擊Show或者Hide按鈕即可。