我想为一系列具有Kentico(v7.0.4990.22818)UniGrid控件的页面提供自定义页面状态机制。 UniGrid的默认状态不起作用,因为我们根据单选按钮的状态构建网格数据绑定查询,因此需要自定义方法。
我希望能够以编程方式从后面的代码中选择当前页面。我尝试探索UniGrid的属性以确定如何做到这一点,但设置UniPage.CurrentPage属性不起作用。所以第一步是禁用网格的默认状态,即
protected void Page_Init(object sender, EventArgs e)
{
Grid.RememberState = false;
}
然后在page_load事件中我尝试设置UniGrid当前页面属性
protected void Page_Load(object sender, EventArgs e)
{
Grid.Pager.UniPager.CurrentPage = ListStateManager.CurrentPage;
}
但是当UniGrid控件加载时,值集会丢失,并且网格只会加载第一页。
是否有一种方法可以让我为网格设置当前页面?
更新
第一次访问unigrid.ascx的pager属性具有预期的CurrentPage值,并且有一个这样的callstack:
App_Web_jce5qutr.dll!CMSAdminControls_UI_UniGrid_UniGrid.Pager.get()第118行C# App_Web_jce5qutr.dll!CMSAdminControls_UI_UniGrid_UniGrid.SetPager()第2431行+ 0x17字节C# App_Web_jce5qutr.dll!CMSAdminControls_UI_UniGrid_UniGrid.UniGridView_DataBound(object sender,System.EventArgs e)891行+ 0xa字节C# [外部代码] App_Web_25xa3r10.dll!CMSModules_ManageTerritories_Default.BindGrid()第147行+ 0x31字节C# App_Web_25xa3r10.dll!CMSModules_ManageTerritories_Default.Page_Load(object sender,System.EventArgs e)第58行+ 0xd字节C# [外部代码] App_Code.dll!SCCommon.StatefulListPage.OnLoad(System.EventArgs e)第64行+ 0xf字节C# [外部代码]
然后多次调用pager属性(大约15次),并使用如下调用堆栈将CurrentPage属性重置为值1:
App_Web_jce5qutr.dll!CMSAdminControls_UI_UniGrid_UniGrid.Pager.get()第118行C# App_Web_jce5qutr.dll!CMSAdminControls_UI_UniGrid_UniGrid.SetPager()第2431行+ 0x17字节C# App_Web_jce5qutr.dll!CMSAdminControls_UI_UniGrid_UniGrid.Page_Load(object sender,System.EventArgs e)第256行+ 0xd字节C# [外部代码]
答案 0 :(得分:0)
如果我设置
<cms:UniGrid ID="gridElem" runat="server" RememberState="False" ...>
标记中的,例如
gridElem.Pager.UniPager.CurrentPage = 2;
在页面背后的Page_Load中,它非常适合我。
尝试调试UniGrid.ascx.cs的Pager属性,以查看它何时被访问。并且还在设置CurrentPage属性的行上放置一个断点,以查看首先发生的事情。