在中多数据绑定的控件很多论功能来说应该属DataGrid最为齐全但它没有提供现成的显示记录序号的功能不过我们可以通过它所带的一些参数来间接得到序号下面来看看怎样得到和显示序号值计算方式如下
()在后台
DataGridCurrentPageIndex * DataGridPageSize + eItemItemIndex +
()在前台
DataGridCurrentPageIndex * DataGridPageSize + ContainerItemIndex +
说明
e表示SystemWebUIWebControlsDataGridItemEventArgs参数类的实例
DataGrid这里表示前台的一个实例
DataGridCurrentPageIndex获取或设置当前显示页的索引
DataGridPageSize 获取或设置要在 DataGrid 控件的单页上显示的项数
下面我使用了种方法来在前台显示序号不过都是围绕上面的计算式展开
() 使用DataGrid的ItemCreated设置值而前台的单元格可以是绑定列或者模板列(包括空模板)
() 使用DataGrid的ItemDataBound设置值而前台的单元格可以是绑定列或者模板列(包括空模板)
() 在前台直接绑定计算表达式
() 在后台类中编写方法计算表达式由前台页面类继承调用
备注在数据库中获取数据时设置额外的序号列这里不做讨论我认为这是最糟糕的实现方法
下面以获取Northwind数据库的Customers表的数据为列显示如下
序号
序号
序号
序号
序号
CustomerID
LONEP
MAGAA
MAISD
MEREP
MORGK
NORTS
OCEAN
OLDWO
OTTIK
PARIS
下面是WebFormPagingaspx文件代码
<%@ Page language=c# Codebehind=WebFormPagingaspxcs AutoEventWireup=false Inherits=AspnetPagingWebForm %>
<!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN >
<HTML>
<HEAD>
<title>WebForm</title>
<meta content=Microsoft Visual Studio NET name=GENERATOR>
<meta content=C# name=CODE_LANGUAGE>
<meta content=JavaScript name=vs_defaultClientScript>
<meta content= name=vs_targetSchema>
</HEAD>
<body>
<form id=Form method=post runat=server>
<TABLE id=Table cellSpacing= cellPadding= width= align=center border=>
<TR>
<TD><asp:datagrid id=DataGrid runat=server AutoGenerateColumns=False Width=% AllowPaging=True>
<Columns>
<asp:BoundColumn HeaderText=序号></asp:BoundColumn>
<asp:TemplateColumn HeaderText=序号></asp:TemplateColumn>
<asp:TemplateColumn HeaderText=序号>
<ItemTemplate>
<asp:Label ID=itemIndex runat=server></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText=序号>
<ItemTemplate>
<%# (DataGridCurrentPageIndex * DataGridPageSize + ContainerItemIndex + ) %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText=序号>
<ItemTemplate>
<%# GetRecordIndex( ContainerItemIndex ) %>
</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>
后台WebFormPagingaspxcs代码如下
using System;
using SystemCollections;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemWeb;
using SystemWebSessionState;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemWebUIHtmlControls;
namespace AspnetPaging
{
public class WebForm : SystemWebUIPage
{
private int recordCount = ;
protected SystemWebUIWebControlsDataGrid DataGrid;
private void Page_Load(object sender SystemEventArgs e)
{
if(!PageIsPostBack)
{
DataGridDataBind();
}
}
//绑定数据
private void DataGridDataBind()
{
DataSet ds = DataAccessGetCustomersData();
thisDataGridDataSource = ds;
thisDataGridDataBind();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
baseOnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
/// </summary>
private void InitializeComponent()
{
thisDataGridItemCreated += new SystemWebUIWebControlsDataGridItemEventHandler(thisDataGrid_ItemCreated);
thisDataGridPageIndexChanged += new SystemWebUIWebControlsDataGridPageChangedEventHandler(thisDataGrid_PageIndexChanged);
thisDataGridItemDataBound += new SystemWebUIWebControlsDataGridItemEventHandler(thisDataGrid_ItemDataBound);
thisLoad += new SystemEventHandler(thisPage_Load);
}
#endregion
//翻页
private void DataGrid_PageIndexChanged(object source SystemWebUIWebControlsDataGridPageChangedEventArgs e)
{
DataGridCurrentPageIndex = eNewPageIndex;
DataGridDataBind();
}
//获取当前项
protected int GetRecordIndex(int itemIndex)
{
return (DataGridCurrentPageIndex * DataGridPageSize + itemIndex + );
}
private void DataGrid_ItemCreated(object sender SystemWebUIWebControlsDataGridItemEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if(eItemItemType == ListItemTypeItem || eItemItemType == ListItemTypeAlternatingItem)
{
eItemCells[]Text = (dgCurrentPageIndex * dgPageSize + eItemItemIndex + )ToString();
eItemCells[]Text = (dgCurrentPageIndex * dgPageSize + eItemItemIndex + )ToString();
}
}
private void DataGrid_ItemDataBound(object sender SystemWebUIWebControlsDataGridItemEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if(eItemItemType == ListItemTypeItem || eItemItemType == ListItemTypeAlternatingItem)
{
((Label)eItemFindControl(itemIndex))Text = (dgCurrentPageIndex * dgPageSize + eItemItemIndex + )ToString();
}
}
}
数据层代码如下
using System;
using SystemData;
using SystemDataSqlClient;
using SystemConfiguration;
namespace AspnetPaging
{
public class DataAccess
{
private static string connString = ConfigurationSettingsAppSettings[ConnString];
private DataAccess()
{
}
public static DataSet GetCustomersData()
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand comm = new SqlCommand(GetCustomersconn);
commCommandType = CommandTypeStoredProcedure;
SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
dataAdapterFill(ds);
return ds;
}
}
}
总结上面的四种方法前两种其实处理起来是一样的只是处理的时间不同而已对于第三种我认为最简单直接在前台页面绑定不需要额外的辅助对于第四种的方法绑定到前台我认为最为灵活需要注意的是GetRecordIndex方法需要protected或public使它的继承类能访问的到