0

Telerik グリッド コンポーネントで奇妙な問題が発生しました... Web フォーム RadGrid について話しているのです。私はいくつかの評価を行っており、現在、独自のビジネスロジックとデータレイヤーを使用してグリッドにフィードしようとしています (参考までに、バックグラウンドで NHibernate を使用しています)。ページング、フィルタリング、および順序付けを正常に機能させることができました...唯一のことは、フィルタリング時に表示されるものは、ビジネスレイヤーが抽出したものではないということです...うーん。私は自分自身を明確にしました。ここにコードaspxがあります

<telerik:RadGrid ID="RadGrid1" runat="server" CellSpacing="0" GridLines="None" AllowFilteringByColumn="True"
    AllowPaging="True" AllowSorting="True" AllowAutomaticDeletes="True" AllowAutomaticInserts="True"
    AllowAutomaticUpdates="True" OnNeedDataSource="RadGrid1_NeedDataSource" AutoGenerateColumns="False" AllowCustomPaging="True"
    EnableLinqExpressions="True"  >
    <MasterTableView DataKeyNames="CountryID" EditMode="Batch" >
        <BatchEditingSettings EditType="Cell" />
        <Columns>
            <telerik:GridBoundColumn DataField="CountryID" FilterControlAltText="Filter CountryID column"
                HeaderText="ID" ReadOnly="True" SortExpression="CountryID" UniqueName="CountryID">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Description" FilterControlAltText="Filter Name column"
                HeaderText="Name" SortExpression="Description" UniqueName="Description">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="IsUE" DataType="System.Byte" FilterControlAltText="Filter IsUE column"
                HeaderText="Is UE" SortExpression="IsUE" UniqueName="IsUE">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="VatApply" DataType="System.Byte" FilterControlAltText="Filter VatApply column"
                HeaderText="Vat Apply" SortExpression="VatApply" UniqueName="VatApply">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="IsActive" DataType="System.Byte" FilterControlAltText="Filter Active column"
                HeaderText="Active" SortExpression="IsActive" UniqueName="IsActive">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Continent" FilterControlAltText="Filter Continent column"
                HeaderText="Continent" SortExpression="Continent" UniqueName="Continent">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="FlgDazi" DataType="System.Byte" FilterControlAltText="Filter FlgDazi column"
                HeaderText="FlgDazi" SortExpression="FlgDazi" UniqueName="FlgDazi">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="PCHost" FilterControlAltText="Filter PCHost column"
                HeaderText="PCHost" SortExpression="PCHost" UniqueName="PCHost" Visible="False">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Status" FilterControlAltText="Filter Status column"
                HeaderText="Status" SortExpression="Status" UniqueName="Status" Visible="False">
            </telerik:GridBoundColumn>                
            <telerik:GridButtonColumn ConfirmText="Delete this product?" ConfirmDialogType="RadWindow"
                ConfirmTitle="Delete" HeaderText="Delete" HeaderStyle-Width="50px" ButtonType="ImageButton"
                CommandName="Delete" Text="Delete" UniqueName="DeleteColumn">
            </telerik:GridButtonColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

そして、私が持っている背後にあるコードで

 protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        var csa =
            new CountryServiceAdv(new SqlServerDataContext(ConnStr, GeoData.Context.GeoDataContext.GetAssemblies()), logAppenders);

        var rg = sender as RadGrid;

        int startRowIndex = rg.CurrentPageIndex * rg.PageSize;
        int maximumRows = rg.PageSize;
        var countries = csa.GetCountries(startRowIndex, maximumRows, GetSortExpression(rg), rg.MasterTableView.FilterExpression);

        rg.DataSource = countries;
        rg.VirtualItemCount = csa.Count(rg.MasterTableView.FilterExpression);
    }

2csaのメソッドは魔法のように機能します。私は他の RadGrid のイベント ハンドラーを実装していません。NeedDataSource イベントですべてを行います。rg.DataSource残念ながら、との両方に適切な値を設定しているにもかかわらず、rg.VirtualItemCountグリッドに表示される項目が少なくなっています。例: 69 アイテムを抽出するフィルターが与えられ、グリッド設定としてページあたり 10 アイテムが与えられた場合、最初のページに 5 アイテムしか得られず、次のページには何も得られません (ページネーターは正しく機能し、適切なページ数があります) )。もう1つの情報。NeedDataSourceイベントハンドラにこのコード行を追加すると

rg.MasterTableView.FilterExpression = "";

最初のページは正しく表示されますが、明らかに、フィルターを削除すると、ページネーションや順序付けなどの次のアクションでフィルター条件が失われます。手がかりはありますか?

4

1 に答える 1

0

Telerik のドキュメントで見つけられる唯一のことは、ItemCommandイベントまたはその他のイベントを処理し、フィルターをリセットする必要がある可能性があることです。

http://www.telerik.com/help/aspnet-ajax/grid-custom-option-for-filtering.html

そして、フィルターをインターセプトして再適用する必要がある場所について、さらに説明を与える可能性のあるイベントのリストを次に示します。

http://www.telerik.com/help/aspnet-ajax/grid-getting-familiar-with-server-side-api.html

于 2013-11-01T14:28:16.173 に答える