在aps.net中多數據綁定的控件很多,論功能來說,應該屬DataGrid最為齊全,但它沒有提供現成的顯示記錄序號的功能,不過我們可以通過它所帶的一些參數來間接得到序號,下面來看看怎樣得到和顯示序號值計算方式如下:
(1)在後台
DataGrid.CurrentPageIndex * DataGrid.PageSize + e.Item.ItemIndex + 1
(2)在前台
DataGrid1.CurrentPageIndex * DataGrid1.PageSize + Container.ItemIndex + 1
說明:
e表示System.Web.UI.WebControls.DataGridItemEventArgs參數類的實例;
DataGrid1這裡表示前台的一個實例;
DataGrid.CurrentPageIndex:獲取或設置當前顯示頁的索引;
DataGrid.PageSize :獲取或設置要在 DataGrid 控件的單頁上顯示的項數。
下面我使用了4種方法來在前台顯示序號,不過都是圍繞上面的計算式展開。
(1) 使用DataGrid的ItemCreated設置值,而前台的單元格可以是綁定列或者模板列(包括空模板);
(2) 使用DataGrid的ItemDataBound設置值,而前台的單元格可以是綁定列或者模板列(包括空模板);
(3) 在前台直接綁定計算表達式;
(4) 在後台類中編寫方法計算表達式由前台頁面類繼承調用。
備注:在數據庫中獲取數據時設置額外的序號列這裡不做討論,我認為這是最糟糕的實現方法。
下面以獲取Northwind數據庫的Customers表的數據為列,顯示如下:
下面是WebFormPaging.aspx文件代碼,
<%@ Page language="c#" Codebehind="WebFormPaging.aspx.cs" AutoEventWireup="false" Inherits="AspnetPaging.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="400" align="center" border="1">
<TR>
<TD><asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" Width="100%" AllowPaging="True">
<Columns>
<asp:BoundColumn HeaderText="序號1"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="序號2"></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="序號3">
<ItemTemplate>
<asp:Label ID="itemIndex" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="序號4">
<ItemTemplate>
<%# (DataGrid1.CurrentPageIndex * DataGrid1.PageSize + Container.ItemIndex + 1) %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="序號5">
<ItemTemplate>
<%# GetRecordIndex( Container.ItemIndex ) %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="CustomerID" HeaderText="CustomerID"></asp:BoundColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid></TD>
</TR>
<TR>
<TD></TD>
</TR>
<TR>
<TD></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
後台WebFormPaging.aspx.cs代碼如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace AspnetPaging
{
public class WebForm1 : System.Web.UI.Page
{
private int recordCount = 0;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
DataGridDataBind();
}
}
//綁定數據
private void DataGridDataBind()
{
DataSet ds = DataAccess.GetCustomersData();
this.DataGrid1.DataSource = ds;
this.DataGrid1.DataBind();
}
#region Web 窗體設計器生成的代碼
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}