如何给datagrid添加自动增长列
我想我们都知道在数据库中如何添加自增长列,我们可以将这个自增长列绑定到datagrid上使得用户方便的知道现在是第几行,今天我介绍一种不用数据库就可以简单显示出自增长列的方法,有人可能会说既然数据库支持我们为什么这样做?我想有如下的两个理由:1、不是所有的表都有自增长列。2、当自增长列不自动复制的时候会出现断号的现象,即使复制这也是有可能发生的。但是先要说明的是这个方法只能显示出来当前页的序号,也就是说如果有分页它只能标记当前这一页的序号。如果要同样实现分页的功能我想使用数据库要比这种方法简单一些,因为如果还是用这个方法那么将要处理状态,这里我不考虑这种方法,但是在文章的结尾我将给出一个数据库的解决方案。
好了下面是正题,首先我们需要在页面里放置一个datagrid。我们用northwind数据库做例子:
html页面的datagrid如下所示:
<asp:datagrid id=”grdtest” runat=”server” height=”228px” width=”262px” autogeneratecolumns=”false” allowpaging=”true”>
<columns>
<asp:templatecolumn>
<itemtemplate>
<!– 这里是关键–>
<span>
<%# container.itemindex+1 %></span>
</itemtemplate>
</asp:templatecolumn>
<asp:boundcolumn datafield=”categoryname”></asp:boundcolumn>
<asp:boundcolumn datafield=”description”></asp:boundcolumn>
</columns>
</asp:datagrid>
下面我们可以写他的后台代码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开始的列有该怎么办呢?我们可以把<!– 这里是关键–>下面的<span>里面的东西换成<asp:label id=lblrownumber runat=”server” text=<%# databinder.eval(container, “itemindex”, “{0}”) %>>就可以了。
如果我们想要实现分页也显示的方法我们将使用datatable的方法来实现,首先我们将datagrid的列全部变成绑定列(为了方便演示,不是必须)。如下所示:
<asp:table id=”tbdata” runat=”server” backcolor=”lightsteelblue” height=”13px” width=”16px” font-names=”宋体” font-name=”宋体” font-size=”8pt” cellpadding=”1″ cellspacing=”0″ bordercolor=”black” borderwidth=”1″ gridlines=”both”></asp:table><br/>
<asp:datagrid id=”grdtest” runat=”server” height=”228px” width=”262px” autogeneratecolumns=”false” pagesize=”2″ allowpaging=”true”>
<columns>
<asp:boundcolumn datafield=”rownumber” headertext=”rownumber”></asp:boundcolumn>
<asp:boundcolumn datafield=”categoryname”></asp:boundcolumn>
<asp:boundcolumn datafield=”description”></asp:boundcolumn>
</columns>
</asp: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;
这样一来即使分页,数字也是连续的,并且将编号应用于所有的行而不是当前这一页的行。