使用多个 SPGridView 进行问题排序

发布于 2024-09-28 10:37:10 字数 411 浏览 5 评论 0原文

我正在使用带有 ObjectDataSource 的 SPGridView 控件SharePoint 2010 解决方案中的控件。 SPGridview 允许我对列表项进行排序和分页,但我注意到当两个 SPGridView 控件放置在同一页面上时出现问题。当我通过单击列的标题链接对下部 SPGridView 控件进行排序时,排序操作成功。但是,当我单击下部 SPGridView 列标题上的 ECB 菜单提供的排序选项时,排序将应用于上部 SPGridView 控件。

任何人都可以提供有关如何解决此问题的修复或指导吗?

谢谢,魔术安迪。

I am using an SPGridView control with an ObjectDataSource control in a SharePoint 2010 solution. The SPGridview allows me to sort and page through a list items OK, but I have noticed a problem when two SPGridView controls are placed on the same page. When I sort the lower SPGridView control by clicking on a column's header link, the sort operation is successful. However when I click on the sort options available through the ECB menu on the lower SPGridView's column header, the sort is applied to the upper SPGridView control instead.

Can anyone offer a fix or guidance on how to resolve this?

Thanks, MagicAndi.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦境 2024-10-05 10:37:10

根据 brian brinley 提供的链接,我想出了这个稍微更通用的解决方案:

protected override void OnPreRender(EventArgs e)
{
    if (this.HeaderRow != null)
    {
        foreach (WebControl control in this.HeaderRow.Controls)
        {                    
            UpdateTemplateClientID(control);
        }      
    }

    base.OnPreRender(e);
}

private void UpdateTemplateClientID(Control control)
{
    if (control is Microsoft.SharePoint.WebControls.Menu)
    {
        Microsoft.SharePoint.WebControls.Menu menuControl = control as Microsoft.SharePoint.WebControls.Menu;
        string jsFunctionCall = menuControl.ClientOnClickPreMenuOpen;
        menuControl.ClientOnClickPreMenuOpen = jsFunctionCall.Replace("%TEMPLATECLIENTID%", this.ClientID + "_SPGridViewFilterMenuTemplate");
    }
    else if (control.HasControls())
    {
        foreach (WebControl c in control.Controls)
        {
            UpdateTemplateClientID(c);
        }
    }
}

Based on the links provided by brian brinley, I came up with this slightly more generic solution:

protected override void OnPreRender(EventArgs e)
{
    if (this.HeaderRow != null)
    {
        foreach (WebControl control in this.HeaderRow.Controls)
        {                    
            UpdateTemplateClientID(control);
        }      
    }

    base.OnPreRender(e);
}

private void UpdateTemplateClientID(Control control)
{
    if (control is Microsoft.SharePoint.WebControls.Menu)
    {
        Microsoft.SharePoint.WebControls.Menu menuControl = control as Microsoft.SharePoint.WebControls.Menu;
        string jsFunctionCall = menuControl.ClientOnClickPreMenuOpen;
        menuControl.ClientOnClickPreMenuOpen = jsFunctionCall.Replace("%TEMPLATECLIENTID%", this.ClientID + "_SPGridViewFilterMenuTemplate");
    }
    else if (control.HasControls())
    {
        foreach (WebControl c in control.Controls)
        {
            UpdateTemplateClientID(c);
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文