作者: cuike519的专栏   http://blog.csdn.net/cuike519/

我想我们都知道在数据库中如何添加自增长列,我们可以将这个自增长列绑定到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谢谢!

如何给DataGrid添加自动增长列相关推荐

  1. 给DataGrid添加自动增长的序列号

    这里提供几个简单好用的方法 原理:给数据源添加一个序列 代码如下: //获得数据源     mySelectCommand = "select * from table" ; Sq ...

  2. oracle LPDA,oracle中自动增长列的设置

    例如在表user中将主键uid设为自动增长列: table: user column: uid ,定义为主键,int或number 结合sequence和trigger实现id列的值的自动增长: 1. ...

  3. DGV设置自动增长列

    当一个DGV要显示两个WEB接口的列表时,使用AutoGenerateColumns自动在后面增加列 try {Models.Department.Query.ResultResponse query ...

  4. 数据的完整性(正确性和准确性):分类-实体完整性:主键约束、唯一约束、自动增长列。域完整性-非空约束、默认值约束、检查约束。引用完整性-一对一、一对多、多对多

    文章目录 1 数据的完整性作用 2 完整性的分类 2.1 实体完整性 2.1.1 主键约束 primary key 2.1.2 唯一约束 unique 2.1.3 自动增长列 auto_increme ...

  5. 2019-7-26 [MySQL] 安装与介绍 语句分类/语法 数据类型 DDL数据定义:创建/查看/删除/使用 DML数据操作:增删改 主键约束 自动增长列 非空约束 默认值 Navicat

    文章目录 0.知识回顾 1.数据库介绍 1.1 数据库概述 1.1.1 什么是数据库 1.1.2 什么是数据库管理系统 1.1.3 数据库与数据库管理系统的关系 1.2 数据库表 1.3 表数据 1. ...

  6. (转贴)给Repeater、Datalist和Datagrid增加自动编号列

    给Repeater.Datalist和Datagrid增加自动编号列 号 内容 1 Taye 2 BOx 3 Glass 4 StarCraft 一.正序 A.AllowPaging=False情况下 ...

  7. SQL获取刚插入的记录的自动增长列ID的值

    假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...

  8. Oracle利用序列实现自动增长列

    在SQL Server以及MySql中都有相应的自动增长列类型,而Oracle中则没有此类型,那如果要实现自动增长列需要怎么办呢. 我们可以利用序列来实现.插入数据时候,可以像sql以及mysql一样 ...

  9. Pg sql 创建自动增长列及修改序列当前值

    Pg 数据库创建自动增长列需要使用sql创建序列,然后再将序列绑定到对应的字段上. 创建序列的sql语句为 CREATE SEQUENCE REDIS_NODE_ID_SEQSTART WITH 1 ...

最新文章

  1. 人脸检测--Recurrent Scale Approximation for Object Detection in CNN
  2. K-Median Subsequence
  3. struts2:struts.xml配置文件详解
  4. 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )
  5. 可视化_仓库管理可视化
  6. 【AC自动机】AC自动机(二次加强版)(luogu 5357)
  7. 自学Linux命令的四种方法
  8. 人工智能(2)---从0开始搭建产品经理的AI知识框架:计算机视觉
  9. C语言为什么被const声明的变量不是一个常量表达式
  10. 利用UICollectionView实现瀑布流
  11. android studio run的时候一直卡在waiting for debug
  12. 联合作战效能评估软件
  13. 数据时代建设医疗数据,主要有哪些意义?
  14. HDU 6438Buy and Resell
  15. 艾美捷双链RNA定量试剂盒试验方案
  16. CSS 实现倒三角形
  17. 使用selenium爬取fofa中的网站链接
  18. php微信wifi扫码连接不上,微信「扫码连WiFi」小程序,教你不用密码一键连Wi-Fi!...
  19. 休闲零食混战:三只松鼠“守淘”,良品铺子“攻抖”
  20. 关于服装制造行业BOM的说明及举例

热门文章

  1. sap可以指定应用服务器,SAP扫盲系列之一:什么是SAP系统和应用服务器
  2. mysql 附近3公里的_mysql搜寻附近N公里内数据的实例
  3. java菱形乱码 编码_JAVA:编码与乱码问题
  4. pip install可能遇到的一些问题
  5. 网络模型:(0)背景
  6. 解决Mask RCNN自己航拍数据集训练的问题
  7. 【神经网络】(13) ShuffleNetV2 代码复现,网络解析,附Tensorflow完整代码
  8. matlab实现指数平滑(一次/二次/三次)
  9. 设置VSCode代码编辑器右侧的Minimap代码缩略图滚动条切换显示、隐藏的快捷键Alt+M
  10. 在CentOS 6.9 x86_64上搭建全功能的OpenResty 1.13.6.1笔记