這裡是我的文章備份,原文請看:
http://www.dotblogs.com.tw/mis2000lab/archive/2010/08/31/linqdatasource_class_listview_gridview.aspx
[習題]下集第五章LinqDataSource,自訂 Class當作資料來源,兼論 ListView與 GridView的小差異
這個範例是在書本裡面學習來的,與大家分享一下。
O'Relly出版社, Programming ASP.NET 3.5(第四版)
VS 2008 / VS 2010適用
因為這本書提供了 C#的範例
所以我只提供 VB版的範例, 以資區隔
..................................................................................................................................................................
我們自己撰寫下列的 Class當作資料來源,
並且設定兩個屬性與一個方法
Imports Microsoft.VisualBasic02 '==================================
03
Imports System.Collections.Generic '--自己動手加入宣告04 '==================================
05

06
07
Public Class Class1_BookSample08

09 '==============================================
10
'-- 提供兩個屬性11

12 Private m_ISBN As String
13
Public Property ISBN() As String14
Get15
Return m_ISBN16
End Get17
Set(ByVal value As String)18
m_ISBN = value19
End Set20
End Property21

22 Private m_Title As String
23
Public Property Title() As String24
Get25
Return m_Title26
End Get27
Set(ByVal value As String)28
m_Title = value29
End Set30
End Property31
'==============================================32

33
34
'-- 提供一個方法35
Public Shared Function BookList() As List(Of Class1_BookSample)36
Dim myBookList As New List(Of Class1_BookSample)()37

38 '-- 使用 New With時,記得屬性名稱需以【.】作為前導字
39
myBookList.Add(New Class1_BookSample() With { _40
.ISBN = "9789867309662", _41
.Title = "ASP.NET 4.0專題實務I:入門實戰篇; 松崗出版"})42

43 myBookList.Add(New Class1_BookSample() With { _
44
.ISBN = "9789866382956", _45
.Title = "ASP.NET專題實務II:範例應用與4.0新功能; 文魁出版"})46

47 Return myBookList
48
End Function49

50
51
End Class
接下來使用 LinqDataSource來擷取資料,並透過 GridView呈現畫面上
HTML畫面只有一個空白的 GridView,什麼設定都沒有
02 '== 自己動手加入宣告
05
Imports System.Collections.Generic06
Imports System.Linq07 '==================================
08

09
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load10
'-- 使用自己寫的 Class當作資料來源(/App_Code目錄下的 Class檔案)11

12 Dim getBookList As List(Of Class1_BookSample) = Class1_BookSample.BookList()
13

14 Dim titles = From b In getBookList Select b.Title
15

16 GridView1.DataSource = titles
17
GridView1.DataBind()18

19
End Sub
上面這個範例比較簡單,一切都ok。
問題出現在 ListView,這也是此習題有趣的地方
先來看看 ListView的 HTML設定畫面
02 <ItemTemplate>
03 <tr style="background-color:#DCDCDC;color: #000000;">
04 <td>
05 <asp:Label ID="titleLabel" runat="server" Text='<%# Eval("title") %>' />
06 </td>
07 </tr>
08 </ItemTemplate>
09
10 <LayoutTemplate>
11 ......非重點。 省 略......
31 </LayoutTemplate>
32 </asp:ListView>
後製程式碼跟上一個範例一模一樣,只是把 GridView1改成 ListView1而已
但會出現錯誤!!
原來,GridView會自動賦予欄位名稱的值,如下圖的 Item
但是 ListView因為是一個以「樣板」為主的大型控制項,在 DataBinding Expression(資料繫結運算式)裡面
已經事先寫好「欄位名稱」了
這個欄位名稱(title)與 後製程式碼裡面 LINQ語法的 b.Title不一樣,
難怪會報錯!
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load02
'-- 使用自己寫的 Class當作資料來源(/App_Code目錄下的 Class檔案)03
Dim getBookList As List(Of Class1_BookSample) = Class1_BookSample.BookList04

05 Dim titles = From b In getBookList _
06
Select b.Title07

08 ListView1.DataSource = titles
09
ListView1.DataBind()10
End Sub
===============================================
這個範例很適合補充在「下集」ASP.NET專題實務 II -- 範例集與 4.0新功能的
第五章 LinqDataSource
這個範例與讀書心得,分享給讀者參考一下。
如果您對 VB語法不熟悉、或是不習慣
請透過這個網站來轉換 (http://www.developerfusion.com/tools/convert/csharp-to-vb/)
...... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ....................................................................................................
(松崗出版,VB版 / C#版)
範例比上一本書增加 166%,內容(頁數)增加 135%
上 / 下兩集 (2010年)已經出版囉 ~ 歡迎到此參加團購
ASP.NET專題實務( II ):範例集 與 4.0新功能 
.................................................................................................... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ........



留言列表