asp.net中显示DataGrid控件列序号的几种方法
?
在aps.net中多數(shù)據(jù)綁定的控件很多,論功能來說,應該屬DataGrid最為齊全,但它沒有提供現(xiàn)成的顯示記錄序號的功能,不過我們可以通過它所帶的一些參數(shù)來間接得到序號,下面來看看怎樣得到和顯示序號值計算方式如下:
(1)在后臺
DataGrid.CurrentPageIndex * DataGrid.PageSize + e.Item.ItemIndex + 1
(2)在前臺
DataGrid1.CurrentPageIndex * DataGrid1.PageSize + Container.ItemIndex + 1
說明:
e表示System.Web.UI.WebControls.DataGridItemEventArgs參數(shù)類的實例;
DataGrid1這里表示前臺的一個實例;
DataGrid.CurrentPageIndex:獲取或設(shè)置當前顯示頁的索引;
DataGrid.PageSize :獲取或設(shè)置要在 DataGrid 控件的單頁上顯示的項數(shù)。
下面我使用了4種方法來在前臺顯示序號,不過都是圍繞上面的計算式展開。
(1)???????? 使用DataGrid的ItemCreated設(shè)置值,而前臺的單元格可以是綁定列或者模板列(包括空模板);
(2)???????? 使用DataGrid的ItemDataBound設(shè)置值,而前臺的單元格可以是綁定列或者模板列(包括空模板);
(3)???????? 在前臺直接綁定計算表達式;
(4)???????? 在后臺類中編寫方法計算表達式由前臺頁面類繼承調(diào)用。
備注:在數(shù)據(jù)庫中獲取數(shù)據(jù)時設(shè)置額外的序號列這里不做討論,我認為這是最糟糕的實現(xiàn)方法。
下面以獲取Northwind數(shù)據(jù)庫的Customers表的數(shù)據(jù)為列,顯示如下:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
下面是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();
????????????? }
???????? }
???????? //綁定數(shù)據(jù)
???????? private void DataGridDataBind()
???????? {
????????????? DataSet ds = DataAccess.GetCustomersData();
????????????? this.DataGrid1.DataSource = ds;
????????????? this.DataGrid1.DataBind();
???????? }
????????
???????? #region Web 窗體設(shè)計器生成的代碼
???????? override protected void OnInit(EventArgs e)
???????? {
????????????? InitializeComponent();
????????????? base.OnInit(e);
???????? }
????????
???????? /// <summary>
???????? /// 設(shè)計器支持所需的方法 - 不要使用代碼編輯器修改
???????? /// 此方法的內(nèi)容。
???????? /// </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();
????????????? }
???????? }
???? }
}
?
數(shù)據(jù)層代碼如下:
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;
???????? }
???? }
}
總結(jié),上面的四種方法前兩種其實處理起來是一樣的,只是處理的時間不同而已;對于第三種我認為最簡單,直接在前臺頁面綁定,不需要額外的輔助;對于第四種的方法綁定到前臺我認為最為靈活,需要注意的是GetRecordIndex方法需要protected或public,使它的繼承類能訪問的到。
總結(jié)
以上是生活随笔為你收集整理的asp.net中显示DataGrid控件列序号的几种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在ASP.Net 中把图片存入数据库
- 下一篇: Asp.net中DataGrid控件的自