2013-05-03 3 views
0

이야기 : 우리는 3 가지 테이블을 가지고 있습니다. TimeReport, Dossier, BU 첫 번째 것은 두 번째 것과 하나, 여러 개가 연결되어 있습니다. 두 번째 것은 세 번째 것, one to many에 연결됩니다. see picture db.png트러블 필터링 그리드

'시간보고'를 표시하려면 radgrid 구성 요소를 사용하고 싶었습니다. 예를 들어 'DossierId'에 필터를 내장하고 '설명'속성을 표시하고 있습니다. 이 작동합니다.

이제 우리는 BU.BUId 및 BU.Code와 같은 필터를 표시하고 필터링하려고합니다. 우리는 자바 스크립트 또는 코드 뒤에 여러 가지 방법을 시도했다. 불행히도 작동하지 않습니다. 문제는 두 테이블에 걸쳐 속성에 액세스하려는 것 같습니다. 이 코드에서 오류가 발생합니다

protected void RadComboBoxTitle_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) 
{ 
    RadComboBox buCombo = sender as RadComboBox; 

    ViewState["buComboValue"] = buCombo.SelectedValue; 

    TimeReportGrid.MasterTableView.FilterExpression = "(it.[Dossier.BUId] = " + buCombo.SelectedValue + ")"; 
    GridColumn column = TimeReportGrid.MasterTableView.GetColumnSafe("BUId"); 
    column.CurrentFilterFunction = GridKnownFunction.EqualTo; 
    column.CurrentFilterValue = buCombo.SelectedValue; 
    TimeReportGrid.Rebind(); 
} 
protected void RadComboBoxTitle_PreRender(object sender, EventArgs e) 
{ 
    if (ViewState["buComboValue"] != null) 
    { 
     RadComboBox buCombo = sender as RadComboBox; 
     buCombo.SelectedValue = ViewState["buComboValue"].ToString(); 
    } 
} 

뒤에

<telerik:GridBoundColumn DataField="Dossier.BU.Code" FilterControlAltText="Filter BUId column" 
    HeaderText="BU" SortExpression="BUId" UniqueName="BUId"> 
    <FilterTemplate> 
     <telerik:RadComboBox ID="RadComboBoxTitle" DataSourceID="dsBU" DataTextField="Code" 
      DataValueField="BUId" AppendDataBoundItems="true" AutoPostBack="true" 
      OnPreRender="RadComboBoxTitle_PreRender" 
      runat="server" OnSelectedIndexChanged="RadComboBoxTitle_SelectedIndexChanged"> 
      <Items> 
       <telerik:RadComboBoxItem Text="All" /> 
      </Items> 
     </telerik:RadComboBox> 
    </FilterTemplate> 
</telerik:GridBoundColumn> 

코드 "TimeReportGrid.Rebind()"('BU'에서 '서류'를 통해 'TimeReport'에서).

'Dossier.BUId'는 현재로드 된 스키마에서 'Model.TimeReport'형식의 멤버가 아닙니다. 이스케이프 된 식별자 6 행 5 번 근처.

필요하면 언제든지 질문하십시오.

귀하의 도움과 빠른 답변에 감사드립니다.

답변

1

필터링하고 리 바인드 할 때 EntityFramework 개체가 데이터베이스에서 연결이 끊어지고 필터링을 시도하는 콘텐츠를 게으른로드 할 수없는 문제가 발생하는 것처럼 보입니다. 모눈을로드하는 초기 쿼리에서 Include() 문을 사용하여 필터링 할 테이블이 필터링 된 연결이 끊긴 컬렉션에서 사용할 수 있도록하십시오.


코드 샘플 - 다음 코드-먼저 엔티티 프레임 워크 객체와 :

TimeReportGrid.MasterTableView.FilterExpression = "(it.Dossier.BUId = " + buCombo.SelectedValue + ")"; 
: 나는에 RadGrid의 MasterTableView에 다시 쓰기 당신의 FilterExpression 수 있어요

public class MyContext : DbContext 
{ 

    public DbSet<TimeReport> TimeReport { get; set; } 

    public DbSet<Dossier> Dossier { get; set; } 

    public DbSet<BU> BU { get; set; } 

} 

public class BU 
{ 

    public int BUId { get; set; } 

    public string Code { get; set; } 

} 

public class Dossier 
{ 

    public int DossierId { get; set; } 

    [ForeignKey("BU")] 
    public int BUId { get; set; } 

    public BU BU { get; set; } 

} 

public class TimeReport 
{ 

    public int TimeReportId { get; set; } 

    [ForeignKey("Dossier")] 
    public int DossierId { get; set; } 

    public Dossier Dossier { get; set; } 

} 

그 연결이 작동합니다.

customize FilterExpressionRadGrid

에 대한 자세한 내용은이 링크를 확인하십시오.