0

ここで明らかな何かが欠けている場合は申し訳ありません....

ユーザーのタイプに合わせて調整する 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();
    }
4

2 に答える 2

1

組み込みの方法はありません。いくつかの選択肢があります:

  • ScottGu のような Dynamic Linq クエリ ライブラリを使用する
  • リフレクションを使用して、プロパティ名から式を作成します
  • switchステートメントを使用して、プロパティの既知のリストから式を選択します (コーディングが簡単で、動的ではありません)。
  • CopyToDataTable拡張メソッドを使用して、 sによる文字列ベースの並べ替え/フィルター処理をサポートするデータ テーブルを作成します。DataView
于 2013-02-05T21:58:19.347 に答える
1

各従業員に対してin という名前のメソッドを呼び出してthis.UniqueName、結果にテキストが含まれているかどうかを確認しようとしていますか? そうです、リフレクションを使用できます。

それが であると確信している場合oは、そのRadComboBoxように渡すこともできます。

private void list_ItemsRequested(RadComboBox o, RadComboBoxItemsRequestedEventArgs e)
{
    o.DataTextField = this.DataField;
    o.DataValueField = this.DataField;

    PropertyInfo property = typeof(EmployeeDTO).GetProperty(this.UniqueName);
    var employees = from emp in EmployeeBL.GetAllEmployees()
                    where ((IQueryable<string>)(property.GetValue(emp))).Contains(e.Text)
                    select emp;
    o.DataSource = employees;

    o.DataBind();
}
于 2013-02-05T21:58:54.177 に答える