<st1:chsdate isrocdate="False" month="9" islunardate="False" day="10" w:st="on" year="2004"></st1:chsdate><o:p></o:p>
在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值计算方式如下:<o:p></o:p>
(1)在后台<o:p></o:p>
DataGrid.CurrentPageIndex * DataGrid.PageSize + e.Item.ItemIndex + 1<o:p></o:p>
(2)在前台<o:p></o:p>
DataGrid1.CurrentPageIndex * DataGrid1.PageSize + Container.ItemIndex + 1<o:p></o:p>
说明:<o:p></o:p>
e表示System.Web.UI.WebControls.DataGridItemEventArgs参数类的实例;<o:p></o:p>
DataGrid1这里表示前台的一个实例;<o:p></o:p>
DataGrid.CurrentPageIndex:获取或设置当前显示页的索引;<o:p></o:p>
DataGrid.PageSize :获取或设置要在 DataGrid 控件的单页上显示的项数。<o:p></o:p>
<o:p> </o:p>
下面我使用了4种方法来在前台显示序号,不过都是围绕上面的计算式展开。<o:p></o:p>
(1) 使用DataGrid的ItemCreated设置值,而前台的单元格可以是绑定列或者模板列(包括空模板);<o:p></o:p>
(2) 使用DataGrid的ItemDataBound设置值,而前台的单元格可以是绑定列或者模板列(包括空模板);<o:p></o:p>
(3) 在前台直接绑定计算表达式;<o:p></o:p>
(4) 在后台类中编写方法计算表达式由前台页面类继承调用。<o:p></o:p>
备注:在数据库中获取数据时设置额外的序号列这里不做讨论,我认为这是最糟糕的实现方法。<o:p></o:p>
下面以获取Northwind数据库的Customers表的数据为列,显示如下:<o:p></o:p>
<o:p></o:p> |
<o:p> </o:p>
下面是WebFormPaging.aspx文件代码,<o:p></o:p>
<%@ Page language="c#" Codebehind="WebFormPaging.aspx.cs" AutoEventWireup="false" Inherits="AspnetPaging.WebForm1" %><o:p></o:p>
<!DOCTYPE HTML PUBLIC "-//W<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="3" numbertype="1" negative="False" unitname="C" w:st="on">3C</st1:chmetcnv>//DTD HTML 4.0 Transitional//EN" ><o:p></o:p>
<HTML><o:p></o:p>
<HEAD><o:p></o:p>
<title>WebForm1</title><o:p></o:p>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"><o:p></o:p>
<meta content="C#" name="CODE_LANGUAGE"><o:p></o:p>
<meta content="JavaScript" name="vs_defaultClientScript"><o:p></o:p>
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"><o:p></o:p>
</HEAD><o:p></o:p>
<body><o:p></o:p>
<form id="Form1" method="post" runat="server"><o:p></o:p>
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="400" align="center" border="1"><o:p></o:p>
<TR><o:p></o:p>
<TD><asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" Width="100%" AllowPaging="True"><o:p></o:p>
<Columns><o:p></o:p>
<asp:BoundColumn HeaderText="序号1"></asp:BoundColumn><o:p></o:p>
<asp:TemplateColumn HeaderText="序号2"></asp:TemplateColumn><o:p></o:p>
<asp:TemplateColumn HeaderText="序号3"><o:p></o:p>
<ItemTemplate><o:p></o:p>
<asp:Label ID="itemIndex" runat="server"></asp:Label><o:p></o:p>
</ItemTemplate><o:p></o:p>
</asp:TemplateColumn><o:p></o:p>
<asp:TemplateColumn HeaderText="序号4"><o:p></o:p>
<ItemTemplate><o:p></o:p>
<%# (DataGrid1.CurrentPageIndex * DataGrid1.PageSize + Container.ItemIndex + 1) %><o:p></o:p>
</ItemTemplate><o:p></o:p>
</asp:TemplateColumn><o:p></o:p>
<asp:TemplateColumn HeaderText="序号5"><o:p></o:p>
<ItemTemplate><o:p></o:p>
<%# GetRecordIndex( Container.ItemIndex ) %><o:p></o:p>
</ItemTemplate><o:p></o:p>
</asp:TemplateColumn><o:p></o:p>
<asp:BoundColumn DataField="CustomerID" HeaderText="CustomerID"></asp:BoundColumn><o:p></o:p>
</Columns><o:p></o:p>
<PagerStyle Mode="NumericPages"></PagerStyle><o:p></o:p>
</asp:datagrid></TD><o:p></o:p>
</TR><o:p></o:p>
<TR><o:p></o:p>
<TD></TD><o:p></o:p>
</TR><o:p></o:p>
<TR><o:p></o:p>
<TD></TD><o:p></o:p>
</TR><o:p></o:p>
</TABLE><o:p></o:p>
</form><o:p></o:p>
</body><o:p></o:p>
</HTML><o:p></o:p>
<o:p> </o:p>
后台WebFormPaging.aspx.cs代码如下:<o:p></o:p>
using System;<o:p></o:p>
using System.Collections;<o:p></o:p>
using System.ComponentModel;<o:p></o:p>
using System.Data;<o:p></o:p>
using System.Drawing;<o:p></o:p>
using System.Web;<o:p></o:p>
using System.Web.SessionState;<o:p></o:p>
using System.Web.UI;<o:p></o:p>
using System.Web.UI.WebControls;<o:p></o:p>
using System.Web.UI.HtmlControls;<o:p></