還是在繼續做我的畢業設計,現在已經做到前台代碼了。在前台頁面的資料繫結時又遇到了一個問題,終於通過自己的努力解決了,在這裡同大家分享一下。(不知道以前有沒有類似的文章)
前言:
在BLL層中的基本上都是CRUD的操作,分別對應資料庫中的INSERT、SELECT、UPDATE、DELETE語句(預存程序),在DAL層讀資料時(Read/Select),一般是返回一行資料,或是多行資料,回到BLL層時就對應一個邏輯對象或是一組對象,如IList<T>。這樣的話,在前台頁面時就可以利用ObjectDataSource和GridView等資料繫結控制項顯示資料。
問題:
我們知道ObjectDataSource控制項需要指定資料對象的INSERT、SELECT、UPDATE、DELETE方法,但是問題就在這裡,我們往往需要在這同一個GridView中顯示另外一個資料對象的某幾項屬性,這時ObjectDataSource就顯得無能為力了,我們需要自己動手來綁定資料了。
解決:
廢話說完了,下面就以My Code直接來說明問題了。
ObjectDataSource的資料對象為Forum,Select方法名為"GetForums",代碼如下<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetForums" TypeName="RFID.BLL.Forum"></asp:ObjectDataSource>
這樣的話直接利用GridView就可以顯示資料了,但是我還需要顯示Forum的最後更新的貼子(Post),這就涉及到另外一個資料對象"Post",但是ObjectDataSource只返回"Forum"對象,只能在頁面中自己寫資料繫結的代碼了。
首先在前台頁面的後置代碼(aspx.cs)中添加一個函數,用來返回PostInfo對象。protected PostInfo GetLastPost(object forumID)
{
int ForumID = Convert.ToInt32(forumID);
Forum forum = new Forum();
return forum.GetLastPost(ForumID);
}
其中值得注意的地方是參數的類型必須是object類型的,這是由於前台頁面使用Eval("forumID")綁定時返回的就是object類型的。
下面接著我們就可以在前台頁面中自訂綁定了,給GridView增加一個ItemTemplate,插入以下代碼片斷:<asp:Literal ID="Post" runat="server" Text='<%# GetLastPost(Eval("forumID")).Title %>' ></asp:Literal>
其中Text='<%# GetLastPost(Eval("forumID")).Title(Title為資料對象PostInfo的一個屬性)便是利用了自訂函數和Eval()實現了資料繫結,從而解決了問題。