asp.net 2.0的一个绑定技巧
还是在继续做我的毕业设计,现在已经做到前台代码了。在前台页面的数据绑定时又遇到了一个问题,终于通过自己的努力解决了,在这里同大家分享一下。(不知道以前有没有类似的文章)
前言:
在BLL层中的基本上都是CRUD的操作,分别对应数据库中的INSERT、SELECT、UPDATE、DELETE语句(存储过程),在DAL层读数据时(Read/Select),一般是返回一行数据,或是多行数据,回到BLL层时就对应一个逻辑对象或是一组对象,如IList<T>。这样的话,在前台页面时就可以利用ObjectDataSource和GridView等数据绑定控件显示数据。
问题:
我们知道ObjectDataSource控件需要指定数据对象的INSERT、SELECT、UPDATE、DELETE方法,但是问题就在这里,我们往往需要在这同一个GridView中显示另外一个数据对象的某几项属性,这时ObjectDataSource就显得无能为力了,我们需要自己动手来绑定数据了。
解决:
废话说完了,下面就以我的代码直接来说明问题了。
ObjectDataSource的数据对象为Forum,Select方法名为"GetForums",代码如下
首先在前台页面的后置代码(aspx.cs)中添加一个函数,用来返回PostInfo对象。
下面接着我们就可以在前台页面中自定义绑定了,给GridView增加一个ItemTemplate,插入以下代码片断:
前言:
在BLL层中的基本上都是CRUD的操作,分别对应数据库中的INSERT、SELECT、UPDATE、DELETE语句(存储过程),在DAL层读数据时(Read/Select),一般是返回一行数据,或是多行数据,回到BLL层时就对应一个逻辑对象或是一组对象,如IList<T>。这样的话,在前台页面时就可以利用ObjectDataSource和GridView等数据绑定控件显示数据。
问题:
我们知道ObjectDataSource控件需要指定数据对象的INSERT、SELECT、UPDATE、DELETE方法,但是问题就在这里,我们往往需要在这同一个GridView中显示另外一个数据对象的某几项属性,这时ObjectDataSource就显得无能为力了,我们需要自己动手来绑定数据了。
解决:
废话说完了,下面就以我的代码直接来说明问题了。
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类型的。{
int ForumID = Convert.ToInt32(forumID);
Forum forum = new Forum();
return forum.GetLastPost(ForumID);
}
下面接着我们就可以在前台页面中自定义绑定了,给GridView增加一个ItemTemplate,插入以下代码片断:
<asp:Literal ID="Post" runat="server" Text='<%# GetLastPost(Eval("forumID")).Title %>' ></asp:Literal>
其中Text='<%# GetLastPost(Eval("forumID")).Title(Title为数据对象PostInfo的一个属性)便是利用了自定义函数和Eval()实现了数据绑定,从而解决了问题。