<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chsdate w:st="on" year="2004" month="9" day="10" islunardate="False" isrocdate="False"><span lang="EN-US"></span></chsdate><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
在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表的数据为列,显示如下:
序号1
|
序号2
|
序号3
|
序号4
|
序号5
|
CustomerID
|
51
|
51
|
51
|
51
|
51
|
LONEP
|
52
|
52
|
52
|
52
|
52
|
MAGAA
|
53
|
53
|
53
|
53
|
53
|
MAISD
|
54
|
54
|
54
|
54
|
54
|
MEREP
|
55
|
55
|
55
|
55
|
55
|
MORGK
|
56
|
56
|
56
|
56
|
56
|
NORTS
|
57
|
57
|
57
|
57
|
57
|
OCEAN
|
58
|
58
|
58
|
58
|
58
|
OLDWO
|
59
|
59
|
59
|
59
|
59
|
OTTIK
|
60
|
60
|
60
|
60
|
60
|
PARIS
|
12345678910
|
|
下面是WebFormPaging.aspx文件代码,
<%@ Page language="c#" Codebehind="WebFormPaging.aspx.cs" AutoEventWireup="false" Inherits="AspnetPaging.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W<chmetcnv w:st="on" unitname="C" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3C</chmetcnv>//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);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
//翻页
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
DataGridDataBind();
}
//获取当前项
protected int GetRecordIndex(int itemIndex)
{
return (DataGrid1.CurrentPageIndex * DataGrid1.PageSize + itemIndex + 1);
}
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Cells[0].Text = (dg.CurrentPageIndex * dg.PageSize + e.Item.ItemIndex + 1).ToString();
e.Item.Cells[1].Text = (dg.CurrentPageIndex * dg.PageSize + e.Item.ItemIndex + 1).ToString();
}
}
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
((Label)e.Item.FindControl("itemIndex")).Text = (dg.CurrentPageIndex * dg.PageSize + e.Item.ItemIndex + 1).ToString();
}
}
}
}
数据层代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace AspnetPaging
{
public class DataAccess
{
private static string connString = ConfigurationSettings.AppSettings["ConnString"];
private DataAccess()
{
}
public static DataSet GetCustomersData()
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand comm = new SqlCommand("GetCustomers",conn);
comm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
return ds;
}
}
}
总结,上面的四种方法前两种其实处理起来是一样的,只是处理的时间不同而已;对于第三种我认为最简单,直接在前台页面绑定,不需要额外的辅助;对于第四种的方法绑定到前台我认为最为灵活,需要注意的是GetRecordIndex方法需要protected或public,使它的继承类能访问的到。
分享到:
相关推荐
asp.net用datagrid控件连接数据库的两个实例.
运用ASP.NET开发Web应用程序过程中,DataGrid是一个非常重要的控件,几乎任何和数据相关的表现都要用到该控件。所以熟练掌握DataGrid控件的应用技巧是每个Web开发人员所必备的基本能力。
自定义asp.net中DataGrid的一个分页控件。。 在winform下实现。。。其实有了思路哪儿写都一样O(∩_∩)O哈哈~
Visual Studio .Net为编写WinForm程序(即:在Windows平台下运行的程序)所提供的DataGrid组件比起微软以往的各种开发环境中提供的 DataGrid组件都要\"高级\"许多。其\"高级\"的地方就在于不需要再进行任何其他设置...
继承asp.net的DataGrid控件实现的表格树控件 /*表格树控件说明 * 此控件继承DataGrid 新增属性说明: * 1.TreeParentCode:顶级根节点parentcode * 2.TreeDisplayDeep:展现表格树深度默认为1 * 3.SumColumns:...
VS.NET中的DataGrid详细解析其中的删除、编辑等代码!
Datagrid 控件是 Microsoft® ASP.NET 中功能最强、用途最广的 Web 控件之一,这一点已经得到了 ASP.NET 权威人士的认同。虽然 Datagrid 控件易于使用,但同样易于给使用者带来麻烦。以下是许多人所犯的一些错误,...
ASP.NET应用:DataGrid使用最佳实践
在ASP.NET提供的数据访问控件中,DataGrid具有功能强大的数据展示功能。本文就实现数据排序、自动编号、产生合计项、数据导出为EXCEL文件格式的功能,进行探讨
在ASP.NET的DataGrid数据显示控件编程中,我们有几种方式可以增加DataGrid columns。其中最常见的方法是在web forms设计器中增加,通过在控件工具箱中拖访DataGrid控件到web设计页面,然后在属性生成器中增加Columns...
ASP.NET中DataGrid的高级技巧[官方视频]
ASP.NET中DataGrid添加超链接、自定义显示示、页脚汇
EasyUI版本比较旧,请下载新的版本更新,最新版本测试通过。
DataGrid/DataList在ASP.NET中的重要性,想必就不用我再强调了,凡显示Table类型的数据,大多会使用这两个控件(当然,如果谁还像ASP那样写ASP.NET,那我也没有办法),所以,每个人可能都有自己的领悟,这篇文章,...
DataList,DataGrid中的分页dll
本文实例讲述了ASP.NET中访问DataGrid中所有控件值的方法。分享给大家供大家参考,具体如下: <%@ Page Language=C# %> <%@ import Namespace=System.Collections %> [removed] void Page_Load...
ASP.NET应用:DataGrid使用最佳实践(ASP.NET应用:DataGrid使用最佳实践代码)
vb中datagrid控件的详细使用方法,拿出来给大家看看!!!!是学习datagrid控件的好助手
深入利用ASP.NET DataGrid控件.pdf
一、 DataGrid方法 二、 DataGrid属性 三、 DataGrid事件四、 DataGrid代码片断 对初学者很有用