February 28, 2009

GridView加入流水號的方法 - 使用伺服器控制項(1)

在「GridView加入流水號的方法 - 不使用Code Behind」中提到了不使用Code Behind方式在GridView中實作流水號的方法。

在專案中,為了GridView畫面的一致性,可能將每個GridView都加入流水號。然而每個使用流水號的GridView都要加入5行的程式碼來顯示流水號,不免有點不夠美觀。何不把流水號寫成一個自訂控制項?每次使用時只要加入1行程式碼註1,讓程式碼易讀又美觀。

以下步驟說明如何建立一個流水號伺服器控制項:

1.建立ASP.NET伺服器控制項專案SerialNumberField
2.將控制項命名為SerialNumberField
3.繼承DataControlField
4.覆寫CreateField(),如下
Protected Overrides Function CreateField() As System.Web.UI.WebControls.DataControlField
  Return New SerialNumberField()
End Function
5.覆寫InitializeCell(ByVal cell As System.Web.UI.WebControls.DataControlFieldCell, ByVal cellType As System.Web.UI.WebControls.DataControlCellType, ByVal rowState As System.Web.UI.WebControls.DataControlRowState, ByVal rowIndex As Integer),如下
Public Overrides Sub InitializeCell(ByVal cell As System.Web.UI.WebControls.DataControlFieldCell, ByVal cellType As System.Web.UI.WebControls.DataControlCellType, ByVal rowState As System.Web.UI.WebControls.DataControlRowState, ByVal rowIndex As Integer)

  MyBase.InitializeCell(cell, cellType, rowState, rowIndex)

  If cellType = DataControlCellType.DataCell Then
    cell.Text = (rowIndex + 1).ToString()
  End If
End Sub
6.建置專案

註1
若將註冊伺服器控制項的指示詞也算進去的話就會是2行。也可改以另一種方式註冊控制項,以省去在每個頁面皆註冊控制項的步驟,請參考「註冊控制項為全域使用的方法」。

如何使用SerialNumberField控制項?

1.將SerialNumberField.dll加入參考

2.於使用流水號的頁面中註冊控制項,如下
<%@ Register assembly="SerialNumberField" namespace="SerialNumberField" tagprefix="sn" %>
3.於GridView的<Columns></Columns>中加入SerialNumberField(如同BoundField一樣),如下
<sn:SerialNumberField />

No comments: