如果使用声明性数据源,是否可以通过编程方式访问数据对象?

时间:2009-03-05 21:54:43

标签: c# asp.net objectdatasource

我正在使用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" ...

3 个答案:

答案 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...
}