zoukankan      html  css  js  c++  java
  • 如何给DataGrid添加自动增长列

     

    如何给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谢谢!

  • 相关阅读:
    希望走过的路成为未来的基石
    第三次个人作业--用例图设计
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次个人编程作业(更新至2020.02.07)
    Springboot vue 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro权限
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    spring cloud springboot 框架源码 activiti工作流 前后分离 集成代码生成器
    java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码
  • 原文地址:https://www.cnblogs.com/neozhu/p/100252.html
Copyright © 2011-2022 走看看