1

RadGrid使用してデータを提供する がありますDataSourceID。RadGrid にはページング機能があり、特定のアイテムを含むページを表示したいと考えています。これを行うには、データ内のアイテムのオフセットを見つけて、ページ番号を設定します。

var index = dataSource.Count(t => t.Id > _selectedTickId);
var page = index / rgTicks.PageSize;
rgTicks.CurrentPageIndex = page;

私の質問は、このコードをどこに置くかです。ではOnDataBound、データ ソースにアクセスできないようです。OnSelectingデータを取得すると、ページ番号を設定するという副作用があります。この機能を実装するには、GridTableView を拡張する必要がありますか? どのメソッドをオーバーライドする必要がありますか?

4

2 に答える 2

1

ページ インデックスはまたはイベントで設定できますが、(データに依存する) でindex値を計算することをお勧めします。OnSelectingOnDataBoundPreRender

于 2013-01-03T10:59:10.383 に答える
1

私のユースケースは、ポップアップ エディターを使用して挿入されたばかりのアイテムにジャンプすることでした。これが私がそれを解決した方法です。タグ内の関連しないプロパティを省略しています。すべてのデータ配線はあなた次第ですが、関連するビットは次のとおりです。重要: DataKeyNames を使用して、値の GridDataItem での面倒な掘り下げを回避します。

私が持っているページで:

 <telerik:RadGrid ID="rgItems" runat="server" AllowPaging="true"
       OnNeedDataSource="rgItems_NeedDataSource"
       OnPreRender="rgItems_PreRender"
       OnInsertCommand="rgItems_InsertCommand">
       <MasterTableView
           CommandItemDisplay="Top"
           CommandItemSettings-AddNewRecordText="Add New Item"
           CommandItemSettings-ShowAddNewRecordButton="True"
           DataKeyNames="IntItemId"
           EditMode="popup"
           EditFormSettings-PopUpSettings-Modal="true">                            

そしてコードビハインドで:

private bool itemInserted = false;

protected void rgItems_InsertCommand(object sender, GridCommandEventArgs e)
{
    itemInserted = true;
}

protected void rgItems_PreRender(object sender, EventArgs e)
{
    if (itemInserted)
    {
        // Select the record and set the page
        int LastItem = 0; // Put code to get last inserted item here
        int Pagecount = rgItems.MasterTableView.PageCount;
        int i = 0;
        GridDataItem GDI = null;
        while (i < Pagecount)
        {
            rgItems.CurrentPageIndex = i;
            rgItems.Rebind();
            GDI = rgItems.MasterTableView.FindItemByKeyValue("IntItemId", LastItem);
            if (GDI != null) break; // IMPORTANT: Breaking here if the item is found stops you on the page the item is on
            i++;
        }
        if (GDI != null) GDI.Selected = true; // Optional: Select the item
        itemInserted = false;
    }
}
于 2015-07-08T16:26:24.413 に答える