动态的管理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按钮即可。