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

我会建议计算indexOnSelecting(取决于数据),而页面索引可以设置在事件中OnDataBoundPreRender

于 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 回答