`
varsoft
  • 浏览: 2435426 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

asp.net中显示DataGrid控件列序号的几种方法

阅读更多

<?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) 使用DataGridItemCreated设置值,而前台的单元格可以是绑定列或者模板列(包括空模板)

(2) 使用DataGridItemDataBound设置值,而前台的单元格可以是绑定列或者模板列(包括空模板)

(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方法需要protectedpublic,使它的继承类能访问的到。

分享到:
评论

相关推荐

    spring java图片上传源码.rar

    源码实现了图片上传功能,可供相关功能开发的小伙伴参考学习使用。

    新入职员工工作总结范文大全(篇).docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    本项目内容为《SpringBoot 2.X 基础教程》配套源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    IMG_20240426_195457.jpg

    IMG_20240426_195457.jpg

    培训看版.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    A Confidence-Guided Automated System for Non-emergency Calls.pdf

    A Confidence-Guided Automated System for Non-emergency Calls.pdf

    用于快速反馈控制律优化的梯度丰富机器学习控制matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    杭州电子科技大学数据结构数据结构讲义.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

    对保险业中人工智能的监管: 平衡消费者保护与创新.pdf

    对保险业中人工智能的监管: 平衡消费者保护与创新.pdf

    重庆大学电磁场原理10年考题(a卷)答案及评分标准.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    银行软件作业代码示例20240426

    震惊,师专男大竟然在夜深人静的夜晚写下了这些普通人都看不懂的东西,内容是...

    导航软件iApp源码V3+配置教程

    一款支持侧边导航栏的网页导航APP源码,风格简约为主,可以通过远程文档进行远程控制列表,浏览器拥有检测下载的功能。,配置较为简单,适合入门小白学习参考。 导航软件iApp源码V3+配置教程 配置教程在mian.iyu的载入事件里面

    基于CNN模型实现土壤湿度检测-数据集和完整代码.rar

    该数据集和完整代码主要实现《基于CNN模型实现土壤湿度检测》,适用于正在学习深度学习、神经网络以及计算机、农业自动化等相关专业的伙伴们。在现代农业和环境监测中,研究土壤湿度数据来预测未来的湿度趋势十分重要。资源中的CNN模型可能仍不够完善,大家可以继续修改完善,不断研究其他的内容。感谢大家的支持和交流,你们的支持也是我前进的十足动力!

    重庆大学数字电子技术试卷2007-2008(1)答案.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    mlab-upenn 研究小组的心脏模型模拟.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    【基于Springboot+Vue的Java毕业设计】银行账目账户管理系统项目实战(源码+录像演示+说明).rar

    【基于Springboot+Vue的Java毕业设计】银行账目账户管理系统项目实战(源码+录像演示+说明).rar 【项目技术】 开发语言:Java 框架:Spingboot+vue 架构:B/S 数据库:mysql 【演示视频-编号:305】 https://pan.quark.cn/s/8dea014f4d36 【实现功能】 用户信息管理,存取业务管理,公告信息管理,挂失信息管理,账户信息管理等

    年公司财务会计岗位工作总结(一).docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    智能机械装备制造信息化整体解决方案.pptx

    智能机械装备制造信息化整体解决方案.pptx

    杭州电子科技大学学生复习卷及部分答案.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

    Unity Asset Quantum Console v2.6.3

    Unity在打包后仍能看到控制台输出,甚至通过命令调用绑定好的函数,调试游戏的强大助手!

Global site tag (gtag.js) - Google Analytics