首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分页时,网格视图值不具有约束力

分页时,网格视图值不具有约束力
EN

Stack Overflow用户
提问于 2014-03-21 19:11:06
回答 3查看 376关注 0票数 0

在下面的代码中,我有一个网格,当我尝试分页时,它抛出了页面索引更改错误,所以我现在尝试修复当我分页时它不绑定values.So的issue.But,有人能帮我解决这个问题吗?

代码语言:javascript
复制
<asp:GridView 
 OnPageIndexChanging="grdsrchlst_PageIndexChanging" ID="grdsrchlst" runat="server"
 PagerStyle-Mode="NumericPages" PageSize="10" PagerStyle-Visible="true"
 AutoGenerateColumns="False" AllowPaging="True">
</asp:GridView> 

代码:

代码语言:javascript
复制
protected void grdsrchlst_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    grdsrchlst.PageIndex = e.NewPageIndex;
    SearchInformation(DataTable dtSearch); //Throws error ...i cant bind the value when paginate
}

public void SearchInformation(DataTable dtSearch)
{ 
    grdsrchlst.DataSource = dtSearch;
    grdsrchlst.DataBind();
}
EN

回答 3

Stack Overflow用户

发布于 2014-03-21 19:28:37

grdsrchlst_PageIndexChanging事件中,dtSearch值将为null

首先加载dtSearch,然后尝试绑定。

票数 0
EN

Stack Overflow用户

发布于 2014-03-21 20:12:22

我认为问题出在您在grdsrchlst_PageIndexChanging中调用SearchInformation()函数的方式。您在调用本身中声明了一个新参数dtSearch,因此它将产生一个错误,因为它没有被初始化。

尝试像下面这样初始化dataTable

代码语言:javascript
复制
protected void grdsrchlst_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdsrchlst.PageIndex = e.NewPageIndex;

            //Initialize dtSearch
            DataTable dtSearch = new DataTable();
            SearchInformation(dtSearch);
        }

在给定的代码中,尽管你已经初始化了dtSearch,但它仍然没有任何值,因此你的网格将不会被显示。其次,我注意到网格的'AutoGenerateColumns‘参数设置为false。因此,除非您在代码中的某个位置向网格视图中添加了列,否则如果与没有值或列的datatable绑定,网格将不会显示。

下面是我编写的运行良好的示例代码

代码语言:javascript
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CSharpWebFormTrials._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView 
            OnPageIndexChanging="grdsrchlst_PageIndexChanging"
            ID="grdsrchlst" runat="server" PagerStyle-Mode="NumericPages"
            PageSize="10" PagerStyle-Visible="true" AutoGenerateColumns="True" AllowPaging="True" Visible="true">
        </asp:GridView>
    </div>
    </form>
</body>
</html>

后面的代码如下

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace CSharpWebFormTrials
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dtSearch = fillData();
            SearchInformation(dtSearch);

            //Store in viewstate
            ViewState["dtSearch"] = dtSearch;

            //Store in Session
            //Session["dtSearch"] = dtSearch;
        }

        protected void grdsrchlst_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdsrchlst.PageIndex = e.NewPageIndex;

            //Initialize the dtSearch variable
            //DataTable dtSearch = new DataTable();

            //Alternately you can fill the data
            //DataTable dtSearch = fillData();

            //Access vuewstate
            DataTable dtSearch;
            if (ViewState["dtSearch"] != null)
            {
                dtSearch = (DataTable)ViewState["dtSearch"];
            }
            else
            {
                dtSearch = fillData();
            }

            //Access Sessiop
            //if (Session["dtSearch"] != null)
            //{
            //    dtSearch = (DataTable)Session["dtSearch"];
            //}
            //else
            //{
            //    dtSearch = fillData();
            //}

            SearchInformation(dtSearch);
        }

        public void SearchInformation(DataTable dtSearch)
        {
            grdsrchlst.DataSource = dtSearch;
            grdsrchlst.DataBind();
        }

        /// <summary>
        /// Filling the dataTable with Dummy data
        /// </summary>
        /// <returns> 
        /// Filled dataTable
        /// </returns>

        public DataTable fillData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Col1");
            dt.Columns.Add("Col2");
            dt.Columns.Add("Col3");
            dt.Columns.Add("Col4");

            for (int i = 0; i < 20; i++)
            {
                dt.Rows.Add(i, i, i, i);
            }
            return dt;
        }
    }
}

我自己是一个初学者,所以如果我传递了任何错误的信息,请专家们给予评论。

票数 0
EN

Stack Overflow用户

发布于 2014-03-21 21:50:06

;第一次填充DataTable时将其粘贴到ViewState中,然后从ViewState中检索它,并在每次更改分页时重新绑定它。

代码语言:javascript
复制
ViewState["dtSearch"] = dtSearch;

然后,当您在PageIndex中移动时发生回发时,您可以通过编写以下代码来获取DataTable:

代码语言:javascript
复制
dtSearch = (DataTable)ViewState["dtSearch"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22557143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档