当前位置:首页>>开发编程>>VS.NET>>新闻内容
如何给DataGrid添加自动增长列
作者:佚名 发布时间:2004-6-21 11:27:08 文章来源:西部E网

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


最新更新
·C#中使用Split分隔字符串的技
·VS2008开发中Windows Mobile
·PC机和移动设备上绝对路径的
·C#程序加壳的方法(使用Sixx
·当前上下文中不存在名称Conf
·请插入磁盘:Visual Studio 2
·用VS.NET读取Flash格式文件信
·在ASP.NET中使用AJAX的简单方
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻
相关信息
画心
愚爱
偏爱
火苗
白狐
画沙
犯错
歌曲
传奇
稻香
小酒窝
狮子座
小情歌
全是爱
棉花糖
海豚音
我相信
甩葱歌
这叫爱
shero
走天涯
琉璃月
Nobody
我爱他
套马杆
爱是你我
最后一次
少女时代
灰色头像
断桥残雪
美了美了
狼的诱惑
我很快乐
星月神话
心痛2009
爱丫爱丫
半城烟沙
旗开得胜
郎的诱惑
爱情买卖
2010等你来
我叫小沈阳
i miss you
姑娘我爱你
我们都一样
其实很寂寞
我爱雨夜花
变心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK绷
贝多芬的悲伤
哥只是个传说
丢了幸福的猪
找个人来爱我
要嫁就嫁灰太狼
如果这就是爱情
我们没有在一起
寂寞在唱什么歌
斯琴高丽的伤心
别在我离开之前离开
不是因为寂寞才想你
爱上你等于爱上了错
在心里从此永远有个你
一个人的寂寞两个人的错