0

さて、今日の私のタスクの 1 つは、クライアントの Web サイトにある既存の Telerik RadFilter を変更することです。フィルター自体により、ユーザーは Telerik RadGrid でクエリを実行できます。これで問題ありませんが、クライアントはこのフィルタリングをコンマ区切りリストの形式で簡単にすることを望んでいます。

<!-- The new comma-separated list text box -->
<asp:TextBox ID="txtQuery" runat="server" TextMode="MultiLine"></asp:TextBox>
<asp:Button ID="btnQuery" runat="server" Text="Filter By List" />

<!-- The existing RadFilter -->
<telerik:RadFilter runat="server" ID="AttendeesGridFilter" Visible="true"
    FilterContainerID="AttendeesGrid" ShowApplyButton="false" />

基本的に、これが参照する AttendeesGrid (RadGrid) には、イベント出席者に関するさまざまな列が含まれています。このカンマ区切りのリストにより、ユーザーは出席者 ID でまとめてすばやくフィルター処理できます。私がこれを行うと考えた方法は、txtQuery のコンテンツを取得し、並べ替えのリストに入れ、RadFilter でそれを起動して、1、2、3、4 のエントリが次のようなものを生成するようにすることです。

ここに画像の説明を入力

これは実際に可能ですか?もしそうなら、誰かがバックエンドからカスタム RadFilter クエリを生成する方法を正しい方向に向けることができますか?

ありがとう!

4

1 に答える 1

1

これは、正しい方向に進むのに役立つかもしれません。今週、コードで同様のことを行いました。投稿する前に、オブジェクト名とコンテンツの一部を削除する必要がありました。

私がしたこと:

  • DataSource が必要な radgrid
  • データソースの取得を新しい関数に移動し、needDataSource からこの関数を呼び出します
  • カスタム データソース フェッチャーを呼び出してグリッドを再バインドすることでカスタム フィルターをトリガーするフィルター (radtextbox) とボタン
  • ページ全体の更新を避けるために、すべてを radAjax Manager (表示されていません) にアタッチします。

ラドグリッド

<telerik:RadTextBox ID="searchBox" runat="server" ></telerik:RadTextBox>
<asp:Button ID="btnAdvSearch" runat="server" Text="Search" OnCommand="FilterBySearch" />
<telerik:RadGrid ID="radGrid1" EnableAJAX="True" runat="server" OnNeedDataSource="radGrid1_NeedDataSource" OnItemDataBound="radGrid1_ItemDataBound">
...
</telerik:RadGrid>

背後にある私のコード DataFetching を独自の関数に移動して、needDataSource だけでなく複数の場所から呼び出すことができるようにしました

protected void radGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
    SetGridDatasource();
}

検索ボタンは、ソースを取得してグリッドを再バインドするこの関数をトリガーします

protected void FilterBySearch(object sender, CommandEventArgs e)
{
    SetGridDatasource();
    radGrid1.DataBind();
}

gridDataSource は DB からオブジェクトを取得し、linq を使用して、渡された検索テキストに基づいてフィルター処理します。

private void SetGridDatasource()
{
    var searchText = searchBox.Text.Trim();
    using (var db = new ContactsDataContext())
    {
        var DataObjectList = db.DataObjectGetByAccount(AccountId, 3).ToList();
        var filtered = (from list in DataObjectList where
            (list.DataObjectName.Contains(searchText) ||
            list.id.ToString().Contains(searchText) ||
            list.description.ToString().Contains(searchText))
            select list);

        rgDataObjects.DataSource = filtered;
    }
}
于 2013-02-14T18:27:51.797 に答える