一个dbgrid的小问题

ddggggdd 2004-07-22 03:02:47
错误代码如下:
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 69: {
行 70: System.Data.DataRow dr ;
行 71: dr = ds.Tables["test"].NewRow() ;
行 72: dr["systemid"] = "1";
行 73: dr["systemname"] = "测试";

单击按钮Button2插入一条数据 我的代码如下(略)ds是我的一个dataset


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace ADOTEST1
{


private void Button2_Click(object sender, System.EventArgs e)
{
System.Data.DataRow dr ;
dr = ds.Tables["test"].NewRow() ;
dr["systemid"] = "1";
dr["systemname"] = "测试";
dr["exportflag"] = "1";
dr["systemclass"] = "1";
}
}
}
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddggggdd 2004-07-22
  • 打赏
  • 举报
回复
非常感谢
brightheroes 2004-07-22
  • 打赏
  • 举报
回复
请楼主注意WinForm和WebForm的区别
在WebForm中
一旦PostBack
变量就会全部丢失
所以要用ViewState保存起来
brightheroes 2004-07-22
  • 打赏
  • 举报
回复
你在Button1中产生了DataSet,但是在Page_Load里面丢失了因为它是一个变量,不是控件
ViewState记不住它的值

所以你要在Button1_Click的code修改为
。。。。。
DataSet ds = new DataSet();
ar.Fill(ds,"test");
this.ViewSate["Ds"] = ds;
......
在BUtton2里面
System.Data.DataRow dr ;
加上
DataSet ds = (DataSet)this.ViewSate["Ds"] ;


最后去掉你的共有变量
private DataSet ds = new DataSet();
ddggggdd 2004-07-22
  • 打赏
  • 举报
回复
to:brightheroes(闭关|那一剑的风情) 应该是这样,ds.Tables["test"]是另一个按钮单击产生的,本身是private变量,我以为可以用 ,可是应该怎么改?全部代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace ADOTEST1
{
/// <summary>
/// WebForm6 的摘要说明。
/// </summary>
public class WebForm6 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private DataSet ds = new DataSet();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}

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

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
OleDbConnection cnn = new OleDbConnection("Provider='MSDAORA.1';User ID=kdtest;Data Source=ntorcl;Password=hisnew");
OleDbDataAdapter ar = new OleDbDataAdapter("select * from accessnew000 ",cnn);
ar.Fill(ds,"test");
DataGrid1.DataSource = ds.Tables["test"];
DataGrid1.DataBind();
}

private void Button2_Click(object sender, System.EventArgs e)
{
System.Data.DataRow dr ;
dr = ds.Tables["test"].NewRow() ;
dr["systemid"] = "1";
dr["systemname"] = "测试";
dr["exportflag"] = "1";
dr["systemclass"] = "1";
ds.Tables["test"].Rows.Add(dr);
}

private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
{

}
}
}
brightheroes 2004-07-22
  • 打赏
  • 举报
回复
两个可能:
第一:ds.Tables["test"]不存在
第二:
dr["systemid"] = "1";
dr["systemname"] = "测试";
dr["exportflag"] = "1";
dr["systemclass"] = "1";
这四个列中,有一列或者几列是不存在的
请检查你的表结构

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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