怎样给datagrid添加自动增长列
我想我们都知道在数据库中怎样添加自增长列,我们能够将这个自增长列绑定到datagrid上使得用户方便的知道现在是第几行,今天我介绍一种不用数据库就能够简单显示出自增长列的方法,有人可能会说既然数据库支持我们为什么这样做?我想有如下的两个理由:1、不是任何的表都有自增长列。2、当自增长列不自动复制的时候会出现断号的现象,即使复制这也是有可能发生的。但是先要说明的是这个方法只能显示出来当前页的序号,也就是说假如有分页他只能标记当前这一页的序号。假如要同样实现分页的功能我想使用数据库要比这种方法简单一些,因为假如还是用这个方法那么将要处理状态,这里我不考虑这种方法,但是在文章的结尾我将给出一个数据库的解决方案。
好了下面是正题,首先我们需要在页面里放置一个datagrid。我们用northwind数据库做例子:
html页面的datagrid如下所示:
<%# container.itemindex+1 %>
下面我们能够写他的后台代码cs的文档了我们在他的page_load里面添加绑定方法如下所示:
private void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
strconnection = configurationsettings.appsettings["sa"].tostring();
myconnection = new sqlconnection(strconnection);
sqldataadapter myadapter = new sqldataadapter("select categoryname, description from categories",myconnection);
// 为了分页方便ds是个全局的变量
myadapter.fill(ds);
this.grdtest.datasource = ds.tables[0].defaultview;
this.grdtest.databind();
}
从上面的过程能够看出我们使用的是表categories,这样我们就能够产生一列自增长的列,此列是从1开始的。假如我们想要一个从0开始的列有该怎么办呢?我们能够把下面的里面的东西换成>就能够了。
假如我们想要实现分页也显示的方法我们将使用datatable的方法来实现,首先我们将datagrid的列全部变成绑定列(为了方便演示,不是必须)。如下所示:
在后台我们添加一个函数:
private datatable getrownumbertable(datatable dt){
datacolumn col = new datacolumn("rownumber",type.gettype("system.int32"));
dt.columns.add(col);
for(int i = 0;i<=dt.rows.count-1;i++){
if(0 == i)
dt.rows[i][col] = 1;
else
dt.rows[i][col] = convert.toint32(dt.rows[i-1][col]) +1;
}
return dt;
}
然后我们将原来数据源改成如下:
this.grdtest.datasource = this.getrownumbertable(ds.tables[0]).defaultview;
这样一来即使分页,数字也是连续的,并且将编号应用于任何的行而不是当前这一页的行。