2009-03-05 3 views
0

나는 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" ... 

답변

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

시를. 시도와 함께, 나는 그것이 작동한다는 것을 의미한다.

0

나는 프레디가 심지어 OnRowDataBound에 대해서 맞다고 생각한다. 비록 당신이 단지 기본 개체보다는 gridview에서 바인딩하는 동안 세포의 텍스트 결과를 검사 할 수 있다고 생각하지만 기억이 안나요.

적어도 GetMoreFoo()에서 반환되기 전에 결과를 세션에 저장할 수 있습니다.

전체 모델 뷰 발표자 (MVP) 일을하고 발표자에게 개체 데이터 원본을 연결하므로 GetMoreFoo() 메서드가 호출 될 때 View (aspx.cs) 또는 Presenter에서 원하는대로 액세스 할 수 있습니다. 함수가 호출됩니다.

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... 
} 
관련 문제