【问题标题】:ASP.Net GridView Custom Pagination Not WorkingASP.Net GridView 自定义分页不起作用
【发布时间】:2019-12-03 12:50:31
【问题描述】:

我已经在我的 ASP.Net gridview 上实现了自定义分页,但它不起作用。当我单击任何页码时,它会加载默认的第一页。我的 gridview 的数据源是一个 SharePoint 列表。我从 SharePoint 列表中获取项目并将其传递给 DataTable,然后将 DataTable 对象绑定到我的 gridview。

以下是我的代码供您参考:

<asp:GridView runat="server" ID="gvSupplierRequests" runat="server" AutoGenerateColumns="False"
                OnRowDataBound="gvSupplierRequests_OnRowDataBound" BorderWidth="2px" GridLines="Both" Width="100%" OnPageIndexChanging="gvSupplierRequests_PageIndexChanging"
                    AllowPaging="true" AllowCustomPaging="true" AllowSorting="true" PagerStyle-CssClass="pagingDiv">
protected void BindSupplierRequests(string siteUrl)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList requestList = web.Lists.TryGetList(Constants.RequestListName);
                    DataTable dtRequests = new DataTable();
                    if (requestList != null)
                    {
                        SPQuery queryRequests = new SPQuery();

                        queryRequests.Query = "<Where><And><Eq><FieldRef Name='ITApproval'/><Value Type='Choice'>Approved</Value></Eq>" +
                                              "<Eq><FieldRef Name='SupplierStatus'/><Value Type='Choice'>Pending</Value></Eq></And></Where>" +
                                              "<OrderBy><FieldRef Name='RequestedDate' Ascending='True' /></OrderBy>";

                        SPListItemCollection spItemColl = requestList.GetItems(queryRequests);                            

                        dtRequests = requestList.GetItems(queryRequests).GetDataTable();
                        gvSupplierRequests.PageSize = 10;
                        gvSupplierRequests.VirtualItemCount = requestList.GetItems(queryRequests).Count;
                        gvSupplierRequests.DataSource = dtRequests;
                        gvSupplierRequests.DataBind();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("QF.IT.Form.DaasAndPaas", TraceSeverity.High, EventSeverity.Error), TraceSeverity.High, "BindSupplierRequests() " + " (general): \r\n\r\n>=message=> " + ex.Message + " \r\n\r\n>=stacktrace=> " + ex.StackTrace);
        }
    }

protected void gvSupplierRequests_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvSupplierRequests.PageIndex = e.NewPageIndex;
            BindSupplierRequests(siteUrl);
        }
        catch (Exception ex)
        {
            SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("QF.IT.Form.DaasAndPaas", TraceSeverity.High, EventSeverity.Error), TraceSeverity.High, "gvSupplierRequests_PageIndexChanging() " + " (general): \r\n\r\n>=message=> " + ex.Message + " \r\n\r\n>=stacktrace=> " + ex.StackTrace);
        }
    }

【问题讨论】:

  • 尝试从 gridview 设计中删除任何一个 AllowPaging="true" AllowCustomPaging="true"
  • 我尝试了您的建议,但没有奏效。这两个属性都必须存在。如果删除 AllowPaging="true" 那么默认和自定义分页都会消失,如果我删除 AllowCustomPaging="true" 那么它会显示默认分页并隐藏我的自定义分页。
  • 限制查询的部分在哪里? (不熟悉 SPQuery 所以请原谅我......)我在那里看不到它,但也许我错过了一些东西。你应该有一个开始和结束。

标签: asp.net gridview datatable sharepoint-2013 sharepoint-list


【解决方案1】:

示例测试演示。

<asp:GridView runat="server" ID="gvSupplierRequests" runat="server" AutoGenerateColumns="True"
                 BorderWidth="2px" GridLines="Both" Width="100%" OnPageIndexChanging="gvSupplierRequests_PageIndexChanging"
                    AllowPaging="true" AllowCustomPaging="true" AllowSorting="true" PagerStyle-CssClass="pagingDiv">
    </asp:GridView>

public partial class TestPagingUserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {                
                BindSupplierRequests(SPContext.Current.Web.Site.Url, 0);
            }
            catch (Exception ex)
            {
            }
        }

        protected SPListItemCollection GetListItems(string siteUrl,int rowlimit, int pageNo,out int itemCount)
        {            
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb oWebsiteRoot = site.OpenWeb())
                {

                    SPList oList = oWebsiteRoot.Lists["Tracker"];
                    int TotalListItems = oList.ItemCount;
                    itemCount = TotalListItems;

                    int iPageCount = (int)Math.Ceiling(TotalListItems / (decimal)rowlimit);
                    Console.WriteLine("Total No of Pages: " + iPageCount); //No of pages to be shown

                    Console.WriteLine("Printing items from pageNo:" + pageNo.ToString());

                    SPQuery query = new SPQuery();
                    query.RowLimit = (uint)rowlimit;
                    query.Query = "<Where><Geq><FieldRef Name='ID'/><Value Type='Number'>1</Value></Geq></Where>" +
                                                  "<OrderBy><FieldRef Name='ID' Ascending='True' /></OrderBy>";

                    int index = 0;

                    SPListItemCollection items;
                    do
                    {
                        items = oList.GetItems(query);
                        if (index == pageNo)
                            break;
                        query.ListItemCollectionPosition = items.ListItemCollectionPosition;
                        index++;

                    }
                    while (query.ListItemCollectionPosition != null);

                    return items;

                }
            }
        }
        protected void BindSupplierRequests(string siteUrl,int pageNo)
        {
            try
            {
                DataTable dtRequests = new DataTable();
                int itemCount;
                dtRequests = this.GetListItems(siteUrl,2, pageNo,out itemCount).GetDataTable();
                gvSupplierRequests.PageSize = 2;
                gvSupplierRequests.PageIndex = pageNo;
                gvSupplierRequests.VirtualItemCount = itemCount;
                gvSupplierRequests.DataSource = dtRequests;
                gvSupplierRequests.DataBind();

            }
            catch (Exception ex)
            {

            }
        }
        protected void gvSupplierRequests_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                int pageNo= e.NewPageIndex;
                BindSupplierRequests(SPContext.Current.Web.Site.Url, pageNo);
            }
            catch (Exception ex)
            {                
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多