如何给DataGrid添加自动增长列

如何给DataGrid添加自动增长列

我想我们都知道在数据库中如何添加自增长列,我们可以将这个自增长列绑定到DataGrid上使得用户方便的知道现在是第几行,今天我介绍一种不用数据库就可以简单显示出自增长列的方法,有人可能会说既然数据库支持我们为什么这样做?我想有如下的两个理由:1、不是所有的表都有自增长列。2、当自增长列不自动复制的时候会出现断号的现象,即使复制这也是有可能发生的。但是先要说明的是这个方法只能显示出来当前页的序号,也就是说如果有分页它只能标记当前这一页的序号。如果要同样实现分页的功能我想使用数据库要比这种方法简单一些,因为如果还是用这个方法那么将要处理状态,这里我不考虑这种方法,但是在文章的结尾我将给出一个数据库的解决方案。
好了下面是正题,首先我们需要在页面里放置一个DataGrid。我们用Northwind数据库做例子:
html页面的DataGrid如下所示:

1<asp:datagrid allowpaging="True" autogeneratecolumns="False" height="228px" id="grdTest" runat="server" width="262px">
2<columns>
3<asp:templatecolumn>
4<itemtemplate>
5<!-- 这里是关键-->
6<span>   

Container.ItemIndex+1

1</itemtemplate>
2</asp:templatecolumn>
3<asp:boundcolumn datafield="CategoryName"></asp:boundcolumn>
4<asp:boundcolumn datafield="Description"></asp:boundcolumn>
5</columns>
6</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开始的列有该怎么办呢?我们可以把

下面的

 1<span>里面的东西换成<asp:label id="lblRowNumber" runat="server" text='```
 2# DataBinder.Eval(Container, "ItemIndex", "{0}") 
 3```'>就可以了。 
 4
 5如果我们想要实现分页也显示的方法我们将使用DataTable的方法来实现,首先我们将DataGrid的列全部变成绑定列(为了方便演示,不是必须)。如下所示:   
 6<asp:table backcolor="LightSteelBlue" bordercolor="black" borderwidth="1" cellpadding="1" cellspacing="0" font-name="宋体" font-names="宋体" font-size="8pt" gridlines="Both" height="13px" id="tbData" runat="server" width="16px"></asp:table>
 7<asp:datagrid allowpaging="True" autogeneratecolumns="False" height="228px" id="grdTest" pagesize="2" runat="server" width="262px">
 8<columns>
 9<asp:boundcolumn datafield="RowNumber" headertext="RowNumber"></asp:boundcolumn>
10<asp:boundcolumn datafield="CategoryName"></asp:boundcolumn>
11<asp:boundcolumn datafield="Description"></asp:boundcolumn>
12</columns>
13</asp:datagrid>   
14在后台我们添加一个函数:   
15private DataTable GetRowNumberTable(DataTable dt){   
16DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));   
17dt.Columns.Add(col);   
18for(int i = 0;i&lt;=dt.Rows.Count-1;i++){   
19if(0 == i)   
20dt.Rows[i][col] = 1;   
21else   
22dt.Rows[i][col] = Convert.ToInt32(dt.Rows[i-1][col]) +1;   
23}   
24return dt;   
25}   
26然后我们将原来数据源改成如下:   
27this.grdTest.DataSource = this.GetRowNumberTable(ds.Tables[0]).DefaultView;   
28这样一来即使分页,数字也是连续的,并且将编号应用于所有的行而不是当前这一页的行。</asp:label></span>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus