asp.net中显示DataGrid控件列序号的几种方法
在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);
}
/// <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中 Calendar(日期控件)的使用
ylbtech-ASP.NET-Control-Basic:Calendar(日期控件)的使用 ASP.NET中 Calendar(日期控件)的使用. 1.A,运行效果返回顶部 Calendar(日期 ...
- 半透明窗口中显示标准控件(控件与文字不透明)的实现方案(附源码)
和大家分享一下在半透明窗口中显示标准控件的实现方案.通过层叠窗口可以简单实现半透明与不规则形状窗口的效果,但在其上显示标准控件(控件与文字不透明)却是件比较有挑战的事情,这里会给出一个可行的解决方案. ...
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件 参考文章: (1)VS2008 在IE8中 调试 Acti ...
- xlsx怎么设置行高列宽_Excel2016中调整行高和列宽的两种方法
在报表的编辑过程中经常需要调整特定行的行高或列的列宽,例如当单元格中输入的数据超出该单元格宽度时,需要调整单元格的列宽.本文图文讲述了Excel2016中调整行高和列宽的两种方法. 方法一:使用命令调 ...
- WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法。
WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法. 原文: WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https ...
- ASP.NET中WEB上弹出消息框的N种方法(为了以后方便,转了很多网友的文章!希望不会介意)...
ASP.NET中WEB上弹出消息框的N种方法 第一个确定之后跳转到另一页面,第二个确定之后返回前一页 Response.Write("<script langage='javascri ...
- Maps模块管理地图控件,用于在web页面中显示地图控件,提供各种接口操作地图控件,如添加标点、路线等。通过plus.maps可获取地图管理对象
方法: openSysMap: 调用系统第三方程序进行导航 create: 创建Map对象 getMapById: 查找已经创建的Map对象 对象: Map: 地图控件对象 MapStyles: 地图 ...
- 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法
在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...
- MFC中动态创建控件及添加消息响应的方法实例
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...
最新文章
- Linux01-企业核心技术之逻辑卷LVM原理深入讲解35
- 还原数据库:The backup set holds a backup of a database other than the existing database……
- Ansible Playbook详解
- tf.contrib.slim add_arg_scope
- 在BAE上搭建python,django环境小记
- java实用教程——组件及事件处理——布局管理(五种)
- android 安卓 pc 电脑 通讯,安卓利用Socket和PC通信无法连接?
- Jenkins下的Pipeline流水线入门篇
- 服务器被入侵怎么办,如何预防
- 阿里云IoT工业数据上云优化实践
- 云天励飞在科创板获准注册:计划募资30亿元,陈宁为实际控制人
- 不要去打扰别人的幸福
- 我的awk常用命令备忘 xargs备忘
- iOS 获取照相机实时预览图片
- locust快速入门
- java基本类型val_Java的基本数据类型
- windows7蓝牙怎么打开_英特尔升级WiFi 和蓝牙驱动,Win10 更新5月版稳了
- 前端笔试面试题之三(2015美的前端笔试)
- (字节跳动公司中山大学合作)IOS科研实训个人报告
- 【前缀和】蓝桥杯试题 k倍区间
热门文章
- linux学 java_[操作系统]Linux学习第二步(Java环境安装)
- data的值 如何初始化vue_vue data恢复初始化数据的实现方法
- C 语言编程利器 之CLion
- GitHub开源比Hadoop快至少10倍的物联网大数据平台
- 【JAVA小游戏+水果售卖系统】基于GUI界面编程的水果“人生”模拟系统
- 基于地平面的单目视觉里程计绝对尺度估计
- PCL中3D特征描述子Shot详解
- 机器学习与高维信息检索 - Note 6 - 核, 核方法与核函数(Kernels and the Kernel Trick)
- windows7/10开启客户端telnet命令解决“‘telnet‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。”
- 在Ubuntu 14.04 64bit上安装网易云音乐Linux版本(最新官方版)