【问题标题】:Displaying current page stats for RadGrid显示 RadGrid 的当前页面统计信息
【发布时间】:2014-07-07 19:49:01
【问题描述】:

所以,我尝试使用 RadGrid 控件显示类似“显示 100 个中的 1-20 个”的内容。我将以下代码放在 RadGrid1_PageIndexChanged 事件中:

int showingRowsFrom = ((e.NewPageIndex + 1) * rgResults.PageSize) - rgResults.PageSize + 1;
int showingRowsTo;

if ((e.NewPageIndex + 1) == rgResults.PageCount)
{
    showingRowsTo = GridSource.Tables[0].Rows.Count;
}
else
{
    showingRowsTo = (e.NewPageIndex + 1) * rgResults.PageSize;
}

string rowCount = string.Format("Displaying {0}-{1} of {2}", showingRowsFrom, showingRowsTo, GridSource.Tables[0].Rows.Count);
lblResultsCountBottom.Text = lblResultsCountTop.Text = rowCount;

不幸的是,看起来这并没有进行完整的回发,并且标签最终也没有得到更新。我该怎么做呢?我尝试在客户端进行操作,但也遇到了问题。它说 $find 是未定义的。

$(document).ready(function () {
    var grid = $find("<%=rgResults.ClientID%>");
    var mtv = grid.get_masterTableView();
    var pageIndex = mtv.get_currentPageIndex();
    alert(pageIndex);
});

这是 radgrid 代码:

<radG:RadGrid ID="rgResults" runat="server" AllowMultiRowSelection="True" AllowPaging="True"
        AllowSorting="True" EnableAJAX="False" GridLines="None" OnItemCommand="rgResults_ItemCommand" OnItemDataBound="rgResults_ItemDataBound"
        PageSize="20"
        Skin="Default" Width="100%" OnPageIndexChanged="rgResults_PageIndexChanged" OnSortCommand="rgResults_SortCommand" OnInit="rgResults_Init" OnPreRender="rgResults_PreRender">
    <ClientSettings ApplyStylesOnClient="True">
    </ClientSettings>
    <ItemStyle CssClass="griditemtext" />
    <HeaderStyle CssClass="gridheadertext" />
    <FooterStyle CssClass="gridfootertext" />
    <AlternatingItemStyle CssClass="gridalternetitemtext" />
    <PagerStyle CssClass="gridpagertext" Mode="NumericPages" />
    <CommandItemStyle CssClass="gridcommandtext" />
    <SelectedItemStyle CssClass="gridselecteditemtext" />
    <MasterTableView AutoGenerateColumns="False"
        DataKeyNames="Article Number" Font-Bold="False" Font-Italic="False" CommandItemDisplay="None" Font-Overline="False"
        Font-Strikeout="False" Font-Underline="False" GridLines="Both">
        <ExpandCollapseColumn Visible="False">
            <HeaderStyle Width="19px" />
        </ExpandCollapseColumn>
        <RowIndicatorColumn Visible="False">
            <HeaderStyle Width="20px" />
        </RowIndicatorColumn>
        <PagerStyle Mode="NumericPages" />
        <Columns>
        </Columns>
    </MasterTableView>
</radG:RadGrid>

我不会发布所有列的代码,因为它们都是以相同的方式完成的,但这里是要点:-p

var hyperLinkColumn = new GridHyperLinkColumn
{
    DataNavigateUrlFields = new[] { "TransactionID" },
    Target = "_blank",
    DataNavigateUrlFormatString = @"~/w1/SearchResultDetail.aspx?id={0}",
    DataTextField = "Article Number",
    HeaderText = "Article Number",
    SortExpression = "Article Number",
    UniqueName = "ArticleNumber"
};
rgResults.Columns.Add(hyperLinkColumn);

【问题讨论】:

    标签: c# asp.net telerik paging radgrid


    【解决方案1】:

    如果标签未更新,则您有 AJAX,因此您需要确保在部分回发响应中包含标签。如果它不在 UpdatePanel 中,请将其包装在一个中。如果它的 UpdateMode 是 Always(默认值),事情应该立即工作。如果将其设置为 Conditional,则需要调用其 Update() 方法。您可能还想将其 RenderMode 设置为 Inline 以避免破坏您的布局。

    在客户端方法上 - 使用 Sys.Application.Load 事件,因为在此之前 MS AJAX 脚本 cotnrols 不可用,因此 $find() 问题。例如:

    function alertMe() {
      var grid = $find("<%=rgResults.ClientID%>");
        var mtv = grid.get_masterTableView();
        var pageIndex = mtv.get_currentPageIndex();
        alert(pageIndex);
    
    Sys.Application.remove_load(alertMe);
    }
    Sys.Application.add_load(alertMe);
    

    【讨论】:

    • 这在这种情况下最终没有帮助,但肯定是很好的信息!我意识到我需要将脚本管理器拖到页面上才能使 $find 函数工作。不幸的是,我的网格变量仍然为空,但这是朝着正确方向迈出的一步。
    • 我什至不知道你是如何在没有脚本管理器的情况下设法让与 MS AJAX 相关的任何东西工作的。在我的示例中,唯一可以阻止网格变量获得正确引用的因素是其他地方的 JavaScript 错误,或者 rgResults 网格不可见(即 Visible=false)。如果两者都不是 - 发布将显示问题的完整代码,以便我们解决它。
    • 我在页面上除了查找之外没有任何 AJAX。我是这个项目的新手,我知道这有点古怪。通过您的代码示例,我能够找出问题所在(当 2 个 AJAX 函数不起作用时,它变得更加清晰:-p)。似乎问题之一可能是我需要使用 RadScriptManager?但这似乎导致了各种问题。使用您提供的代码和标准脚本管理器, $find 返回 null。它正在进入 alertMe() 函数。
    • 尝试在函数中添加超时,以便稍后执行 $find() 和后续代码。这个应该没有问题,我用过太多次了。
    • 没有必要使用 RadScriptManager,它是一个 asp:ScriptManager,上面有一些好东西,所以这应该没什么区别。 $find() 返回 null 表示页面上不存在具有所提供 ID 的 Sys.Component。确保 ID 是正确的并且它与控件的呈现相匹配(如果网格在同一个 NamingContainer 中,它应该与我的 sn-p 一致)。如果您使用它,请删除 ClientIDMode=Static。发布您的代码。
    【解决方案2】:

    看来我已经找到了我的问题的答案。我尝试了很多不同的东西,但看起来这样做的那个可能是引用了错误的版本。

    我正在使用:

    Telerik.WebControls.GridBoundColumn

    而不是

    Telerik.Web.UI.GridBoundColumn

    例如。

    一旦我改变了这个,$find 和其他 ajax 东西就开始工作了。也许我之前使用的是非 AJAX RadGrid,这可以解释它,我想......

    但无论如何,感谢@rdmptn 的所有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2011-05-08
      • 1970-01-01
      • 2016-04-09
      • 2011-09-16
      • 1970-01-01
      相关资源
      最近更新 更多