我有RadGrid
我使用DataSourceID
提供数据。 RadGrid有分页,我想显示包含某个特定项目的页面。为此,我在数据中找到项目的偏移量并设置页码:
var index = dataSource.Count(t => t.Id > _selectedTickId);
var page = index / rgTicks.PageSize;
rgTicks.CurrentPageIndex = page;
我的问题是放置此代码的位置。在OnDataBound
我似乎无法访问数据源。如果我把它放在OnSelecting
中,检索数据会产生设置页码的副作用。我应该扩展GridTableView来实现这个功能吗?我应该覆盖哪种方法?
答案 0 :(得分:1)
我建议在index
中计算OnSelecting
值(这取决于数据),而可以在OnDataBound
或PreRender
事件中设置网页索引。
答案 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;
}
}