我正在尝试在Infrastics WebHierarchicalDataGrid控件中使用自定义数据绑定来实现分页。当用户单击WHDG寻呼机中的页面链接时,所需的行为是从后端检索一页数据(我已经有一个SQL Server SP可以这样做),并将其绑定到WHDG以一次显示一页。
我相信使用"ContainerGridDataBinding"事件是一种方法,但无法设置工作代码。任何关于如何做到这一点的帮助或代码示例都将不胜感激。
如果同样的行为在WHDG 的子带上持续存在也是很好的
一旦您有了SQL请求/选择命令,您将获得一个页面,您将需要创建一个自定义寻呼机来完成此操作。然后,在与按钮/下拉列表或寻呼机中的其他控件相关的事件中,您将调用SQL命令。有关如何实现WebDataGrid的自定义寻呼机,请参阅以下内容:
http://help.infragistics.com/NetAdvantage/ASPNET/2012.1/CLR4.0/?page=WebDataGrid_Using_Custom_Paging_Template.html
自定义寻呼机通过代码:http://help.infragistics.com/NetAdvantage/ASPNET/2012.1/CLR4.0/?page=WebDataGrid_Using_Custom_Paging_Template_in_Code.html
对WebHierarchicalDataGrid执行此操作与对父波段执行此操作相同。对于孩子来说,你会希望为该乐队的行为而不是父乐队的行为来做这件事。
现在,如果你不想在寻呼机中使用按钮和/或下拉菜单,而是想要链接(1,2,3,4等),可以通过在代码中执行以下操作来完成:
private class CustomItemTemplate : ITemplate
{
#region ITemplate Members
public void InstantiateIn(Control container)
{
for (int i = 0; i < 3; i++)
{
LiteralControl link = new LiteralControl();
//class for current page: igg_PageCurrent
//class for other pages: igg_PageLink
link.Text = "<span class='igg_PageLink' idx='" + i.ToString() + "'>" + (i+1).ToString() + "</span>";
container.Controls.Add(link);
}
}
#endregion
}
protected void Page_PreInit(object sender, EventArgs e)
{
whdg1.Behaviors.Paging.PagerTemplate = new CustomItemTemplate();
}
然而,真正的问题是,当以这种方式从数据库中获取数据时,您只能为一个页面获取足够的数据,因此网格不知道数据库中有多少页面。因此,你要么需要知道如何找到它,要么只知道它。这也会使实现子带变得更加困难,因为你需要知道每一行可以扩展多少子记录或记录页。
这比我想象的要容易得多。在每个PageIndexChanged事件中(即使是由自定义寻呼机(可以是自定义UserControl)引起的),我将WHDG绑定到一个伪空数据集,导致ContainerGridDataBinding启动,其中仅从DB 检索当前页面的数据