GridView自訂DataSource

當GridView引用自訂義的資料來源
如果要進行EDIT、DELETE等動作都要自行定義方法
這裡我們用 Value Object 來做示範

[code lang="vbnet"]
<Serializable()>
Public Class UserVO
Public Property ID As Integer
Public Property Name As String
Public Property BirthDay As Date
Public Sub New(ByVal id As Integer,
ByVal name As String,
birthDay As Date)
Me.ID = id
Me.Name = name
Me.BirthDay = birthDay
End Sub
End Class
[/code]

[code lang="vbnet"]
Private Property Users As List(Of UserVO)
Get
If ViewState("_users") Is Nothing Then
Me.InitDataSource()
End If
Return ViewState("_users")
End Get
Set(value As List(Of UserVO))
ViewState("_users") = value
End Set
End Property

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.InitDataSource()
Me.GridViewDataBind()
End If
End Sub

Private Sub InitDataSource()
Dim list As New List(Of UserVO)
list.Add(New UserVO(1, "Bill", CType("1980/10/10", Date)))
list.Add(New UserVO(2, "James", CType("1985/02/20", Date)))
list.Add(New UserVO(3, "Will", CType("1982/12/12", Date)))
list.Add(New UserVO(4, "Jack", CType("1981/07/21", Date)))
Me.Users = list
End Sub

Public Sub GridViewDataBind()
GridView1.DataSource = Me.Users
GridView1.DataBind()
End Sub
[/code]

[code lang="vbnet"]
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:TemplateField HeaderText="BirthDay">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"
Text='<%# Bind("BirthDay", "{0:yyyy/MM/dd}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("BirthDay", "{0:yyyy/MM/dd}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
</Columns>
<EmptyDataTemplate>
No Data.
</EmptyDataTemplate>
</asp:GridView>[/code]

接下來分別定義 RowCancelingEdit、RowDeleting、RowEditing、RowUpdating

[code lang="vbnet" title="RowCancelingEdit"]
GridView1.EditIndex = -1
Me.GridViewDataBind()
[/code]

[code lang="vbnet" title="RowDeleting"]
Me.Users.Remove(Me.Users.Where(Function(c) c.ID = e.Keys.Item(0)).FirstOrDefault())
Me.GridViewDataBind()
[/code]

[code lang="vbnet" title="RowEditing"]
GridView1.EditIndex = e.NewEditIndex
Me.GridViewDataBind()
[/code]

[code lang="vbnet" title="RowUpdating"]
Dim thisUser = Me.Users.Where(Function(c) c.ID = e.Keys.Item(0)).FirstOrDefault()
If Not thisUser Is Nothing Then
thisUser.Name = e.NewValues.Item("Name")
thisUser.BirthDay = e.NewValues.Item("BirthDay")
End If
GridView1.EditIndex = -1
Me.GridViewDataBind()
[/code]

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>