Если вы используете декларативный источник данных, можете ли вы получить доступ к объекту данных программно? - PullRequest
0 голосов
/ 06 марта 2009

Я использую 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 ]

1 голос
/ 06 марта 2009

Попробуйте событие OnRowDataBound для GridView.

Так же, как:

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

Ps. с попробовать, я имею в виду, что это работает:)

0 голосов
/ 23 марта 2009

Вы также можете перехватить результаты своей коллекции в событии ObjectDataSource.Selected, проверив свойство e.ReturnValue.

protected void MyLuckDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    List<Foo> x = (List<Foo>)e.ReturnValue;

    // do whatever you need with the results here...
}
0 голосов
/ 06 марта 2009

Я думаю, что Фредди прав даже в отношении OnRowDataBound. Хотя я думаю, что вы можете проверять только текстовые результаты ячеек во время связывания в виде сетки, а не базовый объект, но я не могу вспомнить.

По крайней мере, вы можете сохранить результаты в сеансе, прежде чем они будут возвращены из GetMoreFoo ().

Я делаю всю презентацию представления модели (MVP) и подключаю источник данных объекта к презентатору, чтобы получить доступ ко всему, что я хочу, в представлении (aspx.cs) или в Presenter, когда функция GetMoreFoo () называется.

...