string conStr = "Server= USERSWO-MI8QI4Q\\SQLEXPRESS;Initial Catalog=LibraryCRM;Integrated Security=SSPI";
                    SqlConnection conn = new SqlConnection(conStr);
                    int index = this.dataGridView2.CurrentCell.RowIndex;
                    string readerID = this.dataGridView2.Rows[index].Cells["readerIDDataGridViewTextBoxColumn"].Value.ToString();
                    string strSQL = "Delete From ReaderInfo Where readerID= '" + readerID + "'";
                    try
                    {
                        conn.Open();
                        SqlDataAdapter sda = new SqlDataAdapter(strSQL ,conn );
                        DataSet ds = new DataSet();
                        sda.Fill(ds, "ReaderInfo");
                        dataGridView2.DataSource = ds.Tables["ReaderInfo"];
                        MessageBox.Show("成功删除数据!");
                        
                    }
数据源是一张视图 ReaderInfo,对dataGridView2进行操作,删除选中行,然后重新绑定数据源
但是每次执行了
dataGridView2.DataSource = ds.Tables["ReaderInfo"];
之后,dataGridView2.DataSource就变成了null
纠结很久了!c#sqlserverdatagridview

解决方案 »

  1.   

    视图一般用来查询,不用来增删改操作,你删除最好还是根据主键直接去对应的表里删除数据另外你delete语句,不用填充到dataset里,直接ExecuteNonQuery()就可以了string conStr = "Server= USERSWO-MI8QI4Q\\SQLEXPRESS;Initial Catalog=LibraryCRM;Integrated Security=SSPI";
                        SqlConnection conn = new SqlConnection(conStr);
                        int index = this.dataGridView2.CurrentCell.RowIndex;
                        string readerID = this.dataGridView2.Rows[index].Cells["readerIDDataGridViewTextBoxColumn"].Value.ToString();
                        string strSQL = "Delete From ReaderInfo Where readerID= '" + readerID + "'";
                        try
                        {
                            conn.Open();
                            //此处加下面几句
                            SqlCommand cmd=conn.CreateCommand();
                            cmd.CommandText=strSQL;
                            cmd.ExecuteNonQuery(); //删除,不建议这样删除视图
                            conn.Close();   
                            strSQL="SELECT * FROM ReaderInfo "; //需要重新绑定
                            SqlDataAdapter sda = new SqlDataAdapter(strSQL ,conn );
                            DataSet ds = new DataSet();
                            sda.Fill(ds, "ReaderInfo");
                            dataGridView2.DataSource = ds.Tables["ReaderInfo"];
                            MessageBox.Show("成功删除数据!");
                            
                        }
      

  2.   

    但是我并不是要显示表中所有的属性的数据,我之前试过用表,然后在datagridview中隐藏一列,最后dataset填充,同样的datasource显示为null
      

  3.   

    我尝试了你改的代码,datasource的问题解决
    但是会出现“System.NullReferenceException”类型的未经处理的异常出现在 System.Windows.Forms.dll 中。
      

  4.   

    我貌似发现我每次一用SqlCommand,就会出现“System.NullReferenceException”类型的未经处理的异常出现在 System.Windows.Forms.dll 中。
      

  5.   


    SqlDataAdapter sda = new SqlDataAdapter(strSQL ,conn );                         DataSet ds = new DataSet();                         
    sda.Fill(ds, "ReaderInfo"); 这个代码,strSQL中是删除语句,用来填充DS自然无效为NULL.
    System.NullReferenceException 查询一下数据库中是否有NULL的字段处理上出问题.
      

  6.   

    改成您说的这样后,
    dataGridView2.DataSource = ds.Tables["ReaderInfo"];
    这句执行后就出现“System.NullReferenceException”类型的未经处理的异常出现
    我实在是不知道怎么改了,可能是因为视图的关系,所以才会这样
    之后我吧数据源改为显示整个表中属性的,就通过了
      

  7.   

    "SELECT * FROM ReaderInfo "肯定不可能还有空字段,要是有的话也就是说他跟原表有关了
      

  8.   

    还是出现“System.NullReferenceException”类型的未经处理的异常出现
    这是要搞死人啊!