ストーリー: 3 つの異なるテーブルがあります。TimeReport、Dossier、BU 最初のものは 2 番目のものに 1 対多で接続されています。2 番目のものは、1 対多で 3 番目のものに接続されます。
「TimeReports」を表示するために radgrid コンポーネントを使用したいと考えました。たとえば、「DossierId」のフィルターを組み込み、プロパティ「説明」を表示しています。これはうまくいきます。
問題は、たとえば BU.BUId と BU.Code を表示してフィルター処理することです。Java スクリプトまたはコード ビハインドを使用して、いくつかの方法でこれを試しました。残念ながら、うまくいきません。問題は、2 つのテーブルのプロパティにアクセスしたいことです。(「TimeReport」から「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>
コードビハインド
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();
}
}
このコードは、「TimeReportGrid.Rebind()」でエラーをスローします。
「Dossier.BUId」は、現在読み込まれているスキーマのタイプ「Model.TimeReport」のメンバーではありません。エスケープされた識別子の近く、6 行目、5 列目。
必要があれば遠慮なく質問してください。
あなたの助けと素早い答えをありがとう。