动态的管理ASP.NET DataGrid数据列

动态的管理 ASP.NET DataGrid 数据列

在 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 按钮即可。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus