我正在使用asp.net 2.0。我正在使用声明性数据源。对于后面代码中的一些内容,我想访问Foo.Bar返回的对象(在下面的示例中)。系统正在缓存它,所以我应该能够访问该版本,而不必重新调用Foo.Bar()。我该怎么做?
<asp:ObjectDataSource ID="MyLuckDataSource1" runat="server"
TypeName="Foo.Bar" SelectMethod="GetMoreFoo"
CacheDuration="Infinite" CacheExpirationPolicy="Sliding"
EnableCaching="True">
<SelectParameters>
<asp:ControlParameter ControlID="BarID" Name="bar_code" Type="String" Direction="Input" DefaultValue="1011" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server" runat="server" DataSourceID="MyLuckDataSource1" ...
答案 0 :(得分:1)
尝试使用GridView的OnRowDataBound事件。
就像:
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var some = (Foo.SomeBar) e.Row.DataItem;
somelabel.Text = some.Date.ToString();
}
}
聚苯乙烯。尝试,我的意思是它有效:)
答案 1 :(得分:0)
我认为弗雷迪对OnRowDataBound的看法是正确的。虽然我认为你只能在gridview上绑定期间检查单元格的文本结果,而不是底层对象,但我不记得了。
至少可以在GetMoreFoo()返回结果之前将结果存储在会话中。
我做整个模型视图演示者(MVP)的事情,我将对象数据源连接到演示者,所以当GetMoreFoo()函数时,我可以在View(aspx.cs)或Presenter上访问我想要的任何内容被称为。
答案 2 :(得分:0)
您还可以通过检查e.ReturnValue属性来捕获ObjectDataSource.Selected事件中的集合结果。
protected void MyLuckDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
List<Foo> x = (List<Foo>)e.ReturnValue;
// do whatever you need with the results here...
}