Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 分页时栅格视图值不绑定_Asp.net_Gridview_Webforms - Fatal编程技术网

Asp.net 分页时栅格视图值不绑定

Asp.net 分页时栅格视图值不绑定,asp.net,gridview,webforms,Asp.net,Gridview,Webforms,在下面的代码中,我有一个网格,当我尝试分页时,它抛出页面索引更改错误,因此我尝试修复该问题。但现在,当我分页时,它没有绑定值。因此,有人帮助我解决该问题 <asp:GridView OnPageIndexChanging="grdsrchlst_PageIndexChanging" ID="grdsrchlst" runat="server" PagerStyle-Mode="NumericPages" PageSize="10" PagerStyle-Visible="true"

在下面的代码中,我有一个网格,当我尝试分页时,它抛出页面索引更改错误,因此我尝试修复该问题。但现在,当我分页时,它没有绑定值。因此,有人帮助我解决该问题

<asp:GridView 
 OnPageIndexChanging="grdsrchlst_PageIndexChanging" ID="grdsrchlst" runat="server"
 PagerStyle-Mode="NumericPages" PageSize="10" PagerStyle-Visible="true"
 AutoGenerateColumns="False" AllowPaging="True">
</asp:GridView> 

dtSearch
值将在
grdsrchlst\u页面索引交换
事件中为
null


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

我认为问题在于在grdsrchlst\u pageindexchange中调用SearchInformation()函数的方式。您正在调用本身中声明一个新参数dtSearch,因此它将被触发一个错误,因为它没有初始化

尝试如下初始化dataTable

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

            //Initialize dtSearch
            DataTable dtSearch = new DataTable();
            SearchInformation(dtSearch);
        }
在给定的代码中,虽然您已初始化dtSearch,但它仍然没有任何值,因此您的网格将不会显示。其次,我观察到网格的“AutoGenerateColumns”参数设置为false。因此,除非您在代码中的某个位置向gridview添加了列,否则,如果使用datatable绑定而没有值或列,网格将不会显示

下面是我编写的有效的示例代码

<%@ 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>

其背后的代码如下

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;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用系统数据;
命名空间CSharpWebFormTrials
{
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
DataTable dtSearch=fillData();
搜索信息(dtSearch);
//在viewstate中存储
ViewState[“dtSearch”]=dtSearch;
//存储会话
//会话[“dtSearch”]=dtSearch;
}
受保护的无效grdsrchlst_页面索引交换(对象发送方,GridViewPageEventArgs e)
{
grdsrchlst.PageIndex=e.NewPageIndex;
//初始化dtSearch变量
//DataTable dtSearch=新建DataTable();
//或者,您可以填充数据
//DataTable dtSearch=fillData();
//访问vuewstate
数据表搜索;
if(ViewState[“dtSearch”]!=null)
{
dtSearch=(数据表)视图状态[“dtSearch”];
}
其他的
{
dtSearch=fillData();
}
//访问会话
//如果(会话[“dtSearch”]!=null)
//{
//dtSearch=(数据表)会话[“dtSearch”];
//}
//否则
//{
//dtSearch=fillData();
//}
搜索信息(dtSearch);
}
公共无效搜索信息(DataTable dtSearch)
{
grdsrchlst.DataSource=dtSearch;
grdsrchlst.DataBind();
}
/// 
///用虚拟数据填充数据表
/// 
///  
///填充数据表
/// 
公共数据表fillData()
{
DataTable dt=新的DataTable();
dt.列添加(“第1列”);
dt.列添加(“Col2”);
dt.列添加(“Col3”);
dt.列添加(“Col4”);
对于(int i=0;i<20;i++)
{
添加(i,i,i,i);
}
返回dt;
}
}
}

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

;第一次填充数据表时,将其固定在ViewState中,然后从ViewState中检索数据表,并在每次更改分页时重新绑定

ViewState["dtSearch"] = dtSearch;
然后,当您在页面索引中移动时发生回发时,您可以通过写入以下内容返回数据表:

dtSearch = (DataTable)ViewState["dtSearch"];

回发发生时,您将数据表保存在哪里?我的问题是我无法调用SearchInformation(datatable dtSearch);从grdsrchlst_pageIndexchange()中,它会在参数(DataTable dtSearch)上抛出错误。这就是为什么首先用值填充
dtSearch
。我的意思是,如果有类似于
dtSearch=
的代码,那么首先调用它,然后调用
SearchInformation(DataTable dtSearch)当它位于第1页时,所有值在移动到下一页时都被绑定。我无法调用绑定方法。这取决于页面生命周期。任何服务器端事件都将导致
回发
。任何
PostBack
都将从一开始就运行代码,将所有公共和私有变量初始化为其原始值。在您的情况下,
dtSearch
将在页面更改事件中失去其值。因此,您需要再次获取值并将其绑定。请提供一些示例,以便将数据表粘贴到ViewState中(您如何在本网站上编写这样的回复代码?)当您首次填充数据表时,您可以这样写:ViewState[“dtSearch”]=dtSearch;然后,当您在页面索引中移动时发生回发时,您可以通过写入:DataTable dtSearch=(DataTable)ViewState[“dtSearch”]返回DataTable。就是这么简单。@user3319384:已编辑以显示使用viewstate和会话的示例
dtSearch = (DataTable)ViewState["dtSearch"];