当前位置:编程学习 > C#/ASP.NET >>

C# datagridview删除行后数据源更新 数据源是视图

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# sqlserver datagridview --------------------编程问答-------------------- 视图一般用来查询,不用来增删改操作,你删除最好还是根据主键直接去对应的表里删除数据

另外你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("成功删除数据!");
                        
                    }
--------------------编程问答-------------------- 但是我并不是要显示表中所有的属性的数据,我之前试过用表,然后在datagridview中隐藏一列,最后dataset填充,同样的datasource显示为null --------------------编程问答--------------------
引用 1 楼 gxingmin 的回复:
视图一般用来查询,不用来增删改操作,你删除最好还是根据主键直接去对应的表里删除数据

另外你delete语句,不用填充到dataset里,直接ExecuteNonQuery()就可以了

C# code?123456789101112131415161718192021string conStr = "Server= USERSWO-MI8QI4Q\\SQLEXP……

我尝试了你改的代码,datasource的问题解决
但是会出现“System.NullReferenceException”类型的未经处理的异常出现在 System.Windows.Forms.dll 中。 --------------------编程问答-------------------- 我貌似发现我每次一用SqlCommand,就会出现“System.NullReferenceException”类型的未经处理的异常出现在 System.Windows.Forms.dll 中。 --------------------编程问答--------------------

SqlDataAdapter sda = new SqlDataAdapter(strSQL ,conn );                         DataSet ds = new DataSet();                         
sda.Fill(ds, "ReaderInfo"); 

这个代码,strSQL中是删除语句,用来填充DS自然无效为NULL.
System.NullReferenceException 查询一下数据库中是否有NULL的字段处理上出问题. --------------------编程问答--------------------
引用 1 楼 gxingmin 的回复:
视图一般用来查询,不用来增删改操作,你删除最好还是根据主键直接去对应的表里删除数据

另外你delete语句,不用填充到dataset里,直接ExecuteNonQuery()就可以了

C# code?123456789101112131415161718192021string conStr = "Server= USERSWO-MI8QI4Q\\SQLEXP……

改成您说的这样后,
dataGridView2.DataSource = ds.Tables["ReaderInfo"];
这句执行后就出现“System.NullReferenceException”类型的未经处理的异常出现
我实在是不知道怎么改了,可能是因为视图的关系,所以才会这样
之后我吧数据源改为显示整个表中属性的,就通过了 --------------------编程问答--------------------
引用 5 楼 wolf_y 的回复:
C# code?12SqlDataAdapter sda = new SqlDataAdapter(strSQL ,conn );                         DataSet ds = new DataSet();                         sda.Fill(ds, "ReaderInfo"); 
这个代码,strSQL中是删除……

"SELECT * FROM ReaderInfo "肯定不可能还有空字段,要是有的话也就是说他跟原表有关了 --------------------编程问答--------------------
引用 6 楼 lyy359477261 的回复:
引用 1 楼 gxingmin 的回复:视图一般用来查询,不用来增删改操作,你删除最好还是根据主键直接去对应的表里删除数据

另外你delete语句,不用填充到dataset里,直接ExecuteNonQuery()就可以了

C# code?123456789101112131415161718192021string conStr = "Server= USE……

还是出现“System.NullReferenceException”类型的未经处理的异常出现
这是要搞死人啊!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,