一个关于datagrid的新问题!

WJY2003 2003-07-27 05:08:15
我全是在代码中对datagrid进行数据绑定的
没用那个设计器
但我在分页时出错了.请指教.
以下是代码.我在datagrid_pageindexchange事件里进行了重新绑定的.
在页面初始化时就对datagrid进行绑定.
string selectstring = "select * from 招聘信息库";
SqlCommand mycommand = myconnection.CreateCommand();
mycommand.CommandText=selectstring;
SqlDataAdapter mydataadapter = new SqlDataAdapter();
mydataadapter.SelectCommand=mycommand;

DataSet mydataset = new DataSet();
myconnection.Open();
string Tablename="招聘信息库";

mydataadapter.Fill(mydataset,Tablename);

DataGrid1.DataSource=mydataset;
mydataadapter.Fill(mydataset,Tablename);
DataGrid1.DataBind();
myconnection.Close();
这一部分没问题,能正确显示.
我设了datagrid可以分页.它显示了1,2,3几个页码.
在DataGrid1_PageIndexChanged我也绑定了
DataGrid1.DataSource=mydataset;
DataGrid1.CurrentPageIndex=e.NewPageIndex;
mydataadapter.Fill( mydataset,tablename);
DataGrid1.DataBind();
就要出错!出错提示:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 152: DataGrid1.DataSource=mydataset;
行 153: DataGrid1.CurrentPageIndex=e.NewPageIndex;
行 154: mydataadapter.Fill( mydataset,tablename);
行 155:
行 156: DataGrid1.DataBind();

高手帮我指一下!急!谢谢
...全文
29 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cleverboy25 2003-07-27
  • 打赏
  • 举报
回复
DataGrid1.DataSource=mydataset;
换成
DataGrid1.DataSource=CreateDataSource();
createsource中把page_load里面的
东西写进去

DataGrid1.CurrentPageIndex = e.NewPageIndex;
DataGrid1.DataSource = CreateDataSource()
DataGrid1.DataBind();
yexiaotong 2003-07-27
  • 打赏
  • 举报
回复
参考:《构建Web解决方案——应用Asp.net和ado.net》
yexiaotong 2003-07-27
  • 打赏
  • 举报
回复
欢迎高手批评指正
yexiaotong 2003-07-27
  • 打赏
  • 举报
回复
这一段看看比较省力:



using System.Data.SqlClient;
using System.Text;

在界面上放置一个DataGrid id = grid
还有一个LinkButton



private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
//计算记录的总数
SetVirtualItemCount();

//设置排序的关键字的字段名
ViewState["SortExpression"] = "employeeid";

//设置grid的分页属性 和 每页的行数
grid.AllowPaging = true;
grid.AllowCustomPaging = true;
grid.PageSize = 5;

}

}


//计算记录的总数
public void SetVirtualItemCount()
{
// Set up the connection
String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
SqlConnection conn = new SqlConnection(strConn);

// Set up the command
String strCmd = "SELECT COUNT(*) FROM Employees";
SqlCommand cmd = new SqlCommand(strCmd, conn);

// Execute the command
conn.Open();
int nItemCount = (int) cmd.ExecuteScalar();
conn.Close();

grid.VirtualItemCount = nItemCount;
return;
}


//每次取数据的过程
SqlDataReader dr;
public SqlDataReader CreateDataSource(int nPageIndex)
{
nPageIndex ++;

String sConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";

// Prepare the SQL command
StringBuilder sb = new StringBuilder("");
sb.Append("SELECT TOP {0} * FROM ");
sb.Append("(SELECT TOP {0} employeeid, firstname, lastname FROM Employees ");
sb.Append("WHERE {1} IN ");
sb.Append("(SELECT TOP {2} {1} FROM Employees ORDER BY {1}) ");
sb.Append("ORDER BY {1} DESC) AS tmp ");
sb.Append("ORDER BY {1}");
String strCmd = sb.ToString();

// Set pseudo-parameters: RowsToFetch, SortField and RowsToFetch
// {0} - rowstodisplay 显示的记录条数
// {1} - sortfield 排序关键字段名
// {2} - rowstofetch 从后台取得记录数

int nRowsToDisplay = grid.PageSize;
int nMod = grid.VirtualItemCount % grid.PageSize;
if (nPageIndex == grid.PageCount && nMod >0)
nRowsToDisplay = nMod;

strCmd = String.Format(strCmd, nRowsToDisplay, ViewState["SortExpression"],
grid.PageSize * nPageIndex);

SqlConnection conn = new SqlConnection(sConn);
conn.Open();

SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = strCmd;

dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

return dr;
}



private void grid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
grid.CurrentPageIndex = e.NewPageIndex;
grid.DataSource = CreateDataSource(grid.CurrentPageIndex);
grid.DataBind();
dr.Close();
}



private void LinkButton1_Click(object sender, System.EventArgs e)
{
grid.DataSource = CreateDataSource(0);
grid.DataBind();
}

chnking 2003-07-27
  • 打赏
  • 举报
回复
你第一部分的代码都是在page_load()中写的?
要是的话mydataset,mydataadapter等等这些对象作用域就都是在page_load(),在DataGrid1_PageIndexChanged方法中就没这些对象了
yexiaotong 2003-07-27
  • 打赏
  • 举报
回复
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;

namespace DataReaderPaging
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton LinkButton1;
protected System.Web.UI.WebControls.DataGrid grid;

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
//计算记录的总数
SetVirtualItemCount();


//设置排序的关键字的字段名
ViewState["SortExpression"] = "employeeid";

//设置grid的分页属性 和 每页的行数
grid.AllowPaging = true;
grid.AllowCustomPaging = true;
grid.PageSize = 5;

}
// 在此处放置用户代码以初始化页面
}


//计算记录的总数
public void SetVirtualItemCount()
{
// Set up the connection
String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
SqlConnection conn = new SqlConnection(strConn);

// Set up the command
String strCmd = "SELECT COUNT(*) FROM Employees";
SqlCommand cmd = new SqlCommand(strCmd, conn);

// Execute the command
conn.Open();
int nItemCount = (int) cmd.ExecuteScalar();
conn.Close();

grid.VirtualItemCount = nItemCount;
return;
}


SqlDataReader dr;
public SqlDataReader CreateDataSource(int nPageIndex)
{
nPageIndex ++;


String sConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";


// Prepare the SQL command
StringBuilder sb = new StringBuilder("");
sb.Append("SELECT TOP {0} * FROM ");
sb.Append("(SELECT TOP {0} employeeid, firstname, lastname FROM Employees ");
sb.Append("WHERE {1} IN ");
sb.Append("(SELECT TOP {2} {1} FROM Employees ORDER BY {1}) ");
sb.Append("ORDER BY {1} DESC) AS tmp ");
sb.Append("ORDER BY {1}");
String strCmd = sb.ToString();

// Set pseudo-parameters: RowsToFetch, SortField and RowsToFetch
// {0} - rowstodisplay 显示的记录条数
// {1} - sortfield 排序关键字段名
// {2} - rowstofetch 从后台取得记录数

int nRowsToDisplay = grid.PageSize;
int nMod = grid.VirtualItemCount % grid.PageSize;
if (nPageIndex == grid.PageCount && nMod >0)
nRowsToDisplay = nMod;

strCmd = String.Format(strCmd,
nRowsToDisplay,
ViewState["SortExpression"],
grid.PageSize * nPageIndex);


SqlConnection conn = new SqlConnection(sConn);
conn.Open();

SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = strCmd;

dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

return dr;

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.grid.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.grid_PageIndexChanged);
this.LinkButton1.Click += new System.EventHandler(this.LinkButton1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void grid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
grid.CurrentPageIndex = e.NewPageIndex;
grid.DataSource = CreateDataSource(grid.CurrentPageIndex);
grid.DataBind();
dr.Close();
}

private void LinkButton1_Click(object sender, System.EventArgs e)
{
grid.DataSource = CreateDataSource(0);
grid.DataBind();
}
}
}
yexiaotong 2003-07-27
  • 打赏
  • 举报
回复
给你一个不错的分页技术

认真看看哦,记得去试试。
xiaopai20 2003-07-27
  • 打赏
  • 举报
回复
我觉得好象没错,
把SqlDataAdapter mydataadapter = new SqlDataAdapter();
mydataadapter.SelectCommand=mycommand;
改为
SqlDataAdapter mydataadapter = new SqlDataAdapter(selectstring,myconnection);
试试,我都是这样写的...
WJY2003 2003-07-27
  • 打赏
  • 举报
回复
没有人吗?

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧