c# - Trouble filtering Grid -


story: have 3 different tables. timereport, dossier, bu first 1 connected second one, 1 many. second 1 connected third one, 1 many. see picture db.png

we wanted use radgrid component display 'timereports'. built in filters example 'dossierid' , displaying property 'description'. works fine.

our problem want display , filter example bu.buid , bu.code. tried several ways, java script or in code behind. unfortunately doesn't work. problem seems want access properties on 2 tables. (from 'timereport' on 'dossier' 'bu')

    <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>  

code behind

protected void radcomboboxtitle_selectedindexchanged(object sender, radcomboboxselectedindexchangedeventargs e)  {      radcombobox bucombo = sender 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 radcombobox;          bucombo.selectedvalue = viewstate["bucombovalue"].tostring();      }  }  

this code throws error on "timereportgrid.rebind()".

'dossier.buid' not member of type 'model.timereport' in loaded schemas. near escaped identifier, line 6, column 5.

feel free ask questions if necessary.

thanks , fast answer.

it looks running problem entityframework objects disconnected database when filtering , rebinding , cannot lazy-load content attempting filter on. try using include() statement in initial query loads grid tables want filter on available in disconnected collection being filtered.


code sample - following code-first entity framework objects:

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

i able re-write filterexpression on mastertableview of radgrid to:

timereportgrid.mastertableview.filterexpression = "(it.dossier.buid = " + bucombo.selectedvalue + ")"; 

and connection works.

check link more information how customize filterexpression radgrid


Comments