两个可能:
第一:ds.Tables["test"]不存在
第二:
dr["systemid"] = "1";
dr["systemname"] = "测试";
dr["exportflag"] = "1";
dr["systemclass"] = "1";
这四个列中,有一列或者几列是不存在的
请检查你的表结构

解决方案 »

  1.   

    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)
    {

    }
    }
    }
      

  2.   

    你在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();
      

  3.   

    请楼主注意WinForm和WebForm的区别
    在WebForm中
    一旦PostBack
    变量就会全部丢失
    所以要用ViewState保存起来