這裡是我的文章備份,原文請看:

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當作資料來源
並且設定兩個屬性與一個方法

01 Imports Microsoft.VisualBasic
02 '==================================
03 Imports System.Collections.Generic   '--自己動手加入宣告

04 '==================================
05
06
07 Public Class Class1_BookSample
08
09     '==============================================
10     '-- 提供兩個屬性
11
12     Private m_ISBN As String
13     Public Property ISBN() As String
14         Get
15             Return m_ISBN
16         End Get
17         Set(ByVal value As String)
18             m_ISBN = value
19         End Set
20     End Property
21
22     Private m_Title As String
23     Public Property Title() As String
24         Get
25             Return m_Title
26         End Get
27         Set(ByVal value As String)
28             m_Title = value
29         End Set
30     End Property
31     '==============================================
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 Function

49
50
51 End Class




接下來使用 LinqDataSource來擷取資料,並透過 GridView呈現畫面上


HTML畫面只有一個空白的 GridView,什麼設定都沒有

01 '==================================
02 '== 自己動手加入宣告
05 Imports System.Collections.Generic
06 Imports System.Linq

07 '==================================
08
09     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
10         '-- 使用自己寫的 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設定畫面

01         <asp:ListView ID="ListView1" runat="server">
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不一樣,
難怪會報錯!

01     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
02         '-- 使用自己寫的 Class當作資料來源(/App_Code目錄下的 Class檔案)
03         Dim getBookList As List(Of Class1_BookSample) = Class1_BookSample.BookList
04
05           Dim titles = From b In getBookList _
06                         Select b.Title
07
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.台灣  ....................................................................................................

ASP.NET 4.0 專題實務 ( I )--入門實戰篇

  ASP.NET 4.0 專題實務(I)_VB  ASP.NET 4.0 專題實務(I)_C#

(松崗出版,VB版  / C#版

範例比上一本書增加 166%,內容(頁數)增加 135%

上 / 下兩集 (2010年)已經出版囉 ~ 歡迎到此參加團購


ASP.NET專題實務( II ):範例集 與 4.0新功能

 

.................................................................................................... 寄信給我    mis2000lab (at) 雅虎.com.台灣 ........

創作者介紹

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 PIXNET 留言(0) 人氣()