在RadGrid中显示包含特定项目的页面

时间:2013-01-03 10:52:28

标签: c# asp.net data-binding radgrid

我有RadGrid我使用DataSourceID提供数据。 RadGrid有分页,我想显示包含某个特定项目的页面。为此,我在数据中找到项目的偏移量并设置页码:

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

我的问题是放置此代码的位置。在OnDataBound我似乎无法访问数据源。如果我把它放在OnSelecting中,检索数据会产生设置页码的副作用。我应该扩展GridTableView来实现这个功能吗?我应该覆盖哪种方法?

2 个答案:

答案 0 :(得分:1)

我建议在index中计算OnSelecting值(这取决于数据),而可以在OnDataBoundPreRender事件中设置网页索引。

答案 1 :(得分:0)

我的用例是跳转到刚刚使用弹出编辑器插入的项目。这是我解决它的方式。我在标签中省略了非相关属性。所有数据接线都取决于您,但这里是相关位。重要提示:使用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;
    }
}