作者:
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 动态添加模板列 asp.net 模板列继承ITemplate 绑定字段名称
jquery easyui 扩展 datagrid 自定义动态隐藏显示列
为DataGrid添加确认删除的对话框 confirm javascript
在DataGrid控件中添加自定义编号列
DataGrid自定义列标题 DataGrid自定义列标题 DataGrid自定义列标题 DataGrid自定义列标题 DataGrid自定义列标题
Wince DataGrid动态添加列和绑定数据 并修改数据 ----------------------------------------------- 对于DataGrid中 值的修改 是参考别人的代码加上自己的一些方法做出来的!
WPF DataGrid 动态添加 行列 比较靠谱的,可以看看,通俗易懂
使用MVVM模式对WPF中的DataGrid控件动态添加列,并实现了编辑模式。
easyUI页面datagrid动态列和form字段动态添加;项目开发时用到的,废了不少事,大概总了一下,现在发出来共享给想我一样的要用到的菜鸟们,谢谢
DataGrid中的排序列怎么设
NULL 博文链接:https://176170847.iteye.com/blog/791601
给DataGrid添加自定义的headerRenderer,实现在Header上自己添加想要的界面功能
jquery.easyui.datagrid自动合并列扩展,支持多列合并。 用法:加载成功后 $('#'+tab).datagrid("autoMergeCells",['列名','列名']);
WPF中的DataGrid合并单元格,模板列内嵌套DataGrid,非真正合并
找了好长时间,终于找到wpf DataGrid添加合计行并始终显示在底部,并带有DataGrid 样式(隔行变色,鼠标移动变色,选中行变色)
DataGrid自动增加数据 DataGrid自动增加数据 DataGrid自动增加数据 DataGrid自动增加数据
C#中为DataGrid添加下拉列表框,本文将介绍如何在 System.Windows.Forms.DataGrid中切入使用ComboBox控件,主要包括三方面的内容。
项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。
解决EasyUIdataGrid列比较多,无数据,列展现不全
DataGrid自动生成代码 可以自动生成DataGrid不要控件