前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何给DataGrid添加自动增长列

如何给DataGrid添加自动增长列

作者头像
阿新
发布2018-04-13 10:35:44
1.7K0
发布2018-04-13 10:35:44
举报
文章被收录于专栏:c#开发者c#开发者

如何给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; 这样一来即使分页,数字也是连续的,并且将编号应用于所有的行而不是当前这一页的行。

希望次文对大家有帮助!文中如有错误请指正e_mail:wu_jian830@hotmail.com谢谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2005-02-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档