显示 RadGrid 的当前页面统计信息

问题描述 投票:0回答:2

因此,我尝试使用 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 pagination telerik radgrid
2个回答
3
投票

如果标签未更新,则您有 AJAX,因此您需要确保在部分回发响应中包含标签。如果它不在 UpdatePanel 中,请将其包装在一个 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);

0
投票

嗯,看来我已经找到了我的问题的答案。我尝试了很多不同的方法,但看起来执行此操作的方法可能引用了错误的版本。

我正在使用:

Telerik.WebControls.GridBoundColumn

而不是

Telerik.Web.UI.GridBoundColumn

例如。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.