熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

asp.net中顯示DataGrid控件列序號的幾種方法

2013-11-13 10:12:47  來源: .NET編程 

  在中多數據綁定的控件很多論功能來說應該屬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使它的繼承類能訪問的到


From:http://tw.wingwit.com/Article/program/net/201311/12926.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.