ここで明らかな何かが欠けている場合は申し訳ありません....
ユーザーのタイプに合わせて調整する RadComboBox フィルターを作成するメソッドをカスタマイズしようとしています (Telerik デモに基づく)。ビジネス ロジック レイヤーを使用してデータソースを取得しています。次に、linq を使用して、どのコンボ ボックスが要求を行ったかに応じてコンボ ボックス OnItemsRequested の値を選択しようとしています。どの GridColumn フィルターが要求を行っているかに基づいて、「where」句にパラメーターを設定しようとしています。
リストを埋めるための私のコードは次のとおりです。
private void list_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
{
((RadComboBox)o).DataTextField = this.DataField;
((RadComboBox)o).DataValueField = this.DataField;
var employees = from emp in EmployeeBL.GetAllEmployees()
where emp.(this.UniqueName).Contains(e.Text)
select emp;
((RadComboBox)o).DataSource = employees;
((RadComboBox)o).DataBind();
}
UniqueName をデータ オブジェクト (EmployeeDTO) のパラメーターとしてキャストする必要がありますか?
ありがとう。
更新:: フィードバックのおかげで、コンボボックス リストの作成に成功しました。ただし、linq ステートメントにはまだ誤りがあると思います。リストは初めて作成されますが、「StartsWith」比較を実行しようとすると、間違いなく「検索可能な」文字列を入力しているにもかかわらず、データソースにデータ行が含まれていないというエラーがページにスローされます。
これが私が今持っているものです。
private void list_ItemsRequested(RadComboBox o, RadComboBoxItemsRequestedEventArgs e)
{
o.DataTextField = this.DataField;
o.DataValueField = this.DataField;
DataTable dt = EmployeeBL.GetAllEmployees().AsDataTable();
IEnumerable<DataRow> query =
from emp in dt.AsEnumerable()
where emp.Field<String>(this.UniqueName).StartsWith(e.Text)
select emp;
DataTable boundTable = query.CopyToDataTable<DataRow>();
o.DataSource = boundTable;
o.DataBind();
}