如何以编程方式设置kentico unigrid的当前页面?

时间:2013-12-02 12:20:16

标签: asp.net webforms kentico

我想为一系列具有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#       [外部代码]

1 个答案:

答案 0 :(得分:0)

如果我设置

<cms:UniGrid ID="gridElem" runat="server" RememberState="False" ...>
标记中的

,例如

gridElem.Pager.UniPager.CurrentPage = 2;
在页面背后的Page_Load中,它非常适合我。

尝试调试UniGrid.ascx.cs的Pager属性,以查看它何时被访问。并且还在设置CurrentPage属性的行上放置一个断点,以查看首先发生的事情。