C# 如果使用声明性数据源,能否以编程方式访问数据对象?

C# 如果使用声明性数据源,能否以编程方式访问数据对象?,c#,asp.net,objectdatasource,C#,Asp.net,Objectdatasource,我正在使用asp.NET2.0。我正在使用声明性数据源。对于代码背后的某些内容,我希望访问Foo.Bar返回的对象(在下面的示例中)。系统正在缓存它,因此我应该能够访问该版本,而不必重新调用Foo.Bar()。我该怎么做 <asp:ObjectDataSource ID="MyLuckDataSource1" runat="server" TypeName="Foo.Bar" SelectMethod="GetMoreFoo" CacheDuration="Infini

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


尝试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();
    }
}

注:我的意思是说,try是有效的:)

我认为弗雷迪对OnRowDataBound的看法是正确的。虽然我认为您只能在gridview绑定期间检查单元格的文本结果,而不能检查底层对象,但我记不起来了

在从GetMoreFoo()返回结果之前,至少可以将结果存储在会话中


我完成了整个模型视图演示器(MVP)的工作,并将对象数据源连接到演示器,以便在调用GetMoreFoo()函数时可以访问视图(aspx.cs)或演示器上的任何内容。

您还可以通过检查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...
}
protectedvoid MyLuckDataSource1_已选中(对象发送方,ObjectDataSourceStatusEventArgs e)
{
列表x=(列表)e.ReturnValue;
//用这里的结果做你需要的任何事情。。。
}