在下面的代码中,我有一个网格,当我尝试分页时,它抛出了页面索引更改错误,所以我现在尝试修复当我分页时它不绑定values.So的issue.But,有人能帮我解决这个问题吗?
<asp:GridView
OnPageIndexChanging="grdsrchlst_PageIndexChanging" ID="grdsrchlst" runat="server"
PagerStyle-Mode="NumericPages" PageSize="10" PagerStyle-Visible="true"
AutoGenerateColumns="False" AllowPaging="True">
</asp:GridView> 代码:
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();
}发布于 2014-03-21 19:28:37
在grdsrchlst_PageIndexChanging事件中,dtSearch值将为null。
首先加载dtSearch,然后尝试绑定。
发布于 2014-03-21 20:12:22
我认为问题出在您在grdsrchlst_PageIndexChanging中调用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。因此,除非您在代码中的某个位置向网格视图中添加了列,否则如果与没有值或列的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;
}
}
}我自己是一个初学者,所以如果我传递了任何错误的信息,请专家们给予评论。
发布于 2014-03-21 21:50:06
;第一次填充DataTable时将其粘贴到ViewState中,然后从ViewState中检索它,并在每次更改分页时重新绑定它。
ViewState["dtSearch"] = dtSearch;然后,当您在PageIndex中移动时发生回发时,您可以通过编写以下代码来获取DataTable:
dtSearch = (DataTable)ViewState["dtSearch"];https://stackoverflow.com/questions/22557143
复制相似问题