问题描述
cmd.CommandText="deletefrom员工信息表whereID='"+this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString()+"'";cmd.ExecuteNonQuery();
解决方案
解决方案二:
删除成功之后让datagridview1重新绑定下数据源
解决方案三:
楼上说的有道理privatevoidDelete_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection("数据库连接串");conn.Open();SqlDataAdapterdaAuthors=newSqlDataAdapter("Select*Fromstudent",conn);DataSetdsPubs=newDataSet("Pubs");daAuthors.FillSchema(dsPubs,SchemaType.Source,"student");//FillSchema加载表的架构和数据,有了架构,表就知道哪个列是它的主键,同时Rows集合的Find方法也就可用了。daAuthors.Fill(dsPubs,"student");DataTabletblAuthors;tblAuthors=dsPubs.Tables["student"];if(MessageBox.Show("确实要删除该行吗?","询问",MessageBoxButtons.YesNo)==DialogResult.Yes){DataRowdrCurrent;stringRow_zhi=dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//获取第一个单元格的值//MessageBox.Show(Row_zhi);drCurrent=tblAuthors.Rows.Find(Row_zhi);drCurrent.Delete();SqlCommandBuilderobjCommandBuilder=newSqlCommandBuilder(daAuthors);//SqlCommandBuilder提供自动生成单表命令的一种方式,这些命令用于协调使用关联的SQLServer数据库对DataSet执行的更改。daAuthors.Update(dsPubs,"student");//数据适配器.Update()方法//MessageBox.Show("数据库更新成功!");//-------重新绑定dataGridView的数据源,以便重新显示-------daAuthors.Fill(dsPubs,"student");DataTabletblAuthors1;tblAuthors1=dsPubs.Tables["student"];dataGridView1.DataSource=tblAuthors1;}conn.Close();conn.Dispose();//MessageBox.Show("数据库连接已关闭");}注:SqlDataAdapter不自动生成协调对DataSet执行的更改(使用关联的SQLServer实例)所需的Transact-SQL语句。但是,如果设置了SqlDataAdapter的SelectCommand属性,则可以创建一个SqlCommandBuilder对象来自动生成用于单表更新的Transact-SQL语句。然后,SqlCommandBuilder将生成其他任何未设置的Transact-SQL语句。一旦设置DataAdapter属性,SqlCommandBuilder就将其自身注册为RowUpdating事件的侦听器。一次只能将一个SqlDataAdapter与一个SqlCommandBuilder对象(或相反)互相关联。为了生成INSERT、UPDATE或DELETE语句,SqlCommandBuilder会自动使用SelectCommand属性来检索所需的元数据集。如果在检索元数据后(例如在第一次更新后)更改SelectCommand,则应调用RefreshSchema方法来更新元数据。SelectCommand还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生InvalidOperation异常,不生成命令。SqlCommandBuilder还使用由SelectCommand引用的Connection、CommandTimeout和Transaction属性。如果修改了任何这些属性或者替换了SelectCommand本身,用户则应调用RefreshSchema。否则,InsertCommand、UpdateCommand和DeleteCommand属性将保留它们以前的值。如果调用Dispose,则会解除SqlCommandBuilder与SqlDataAdapter的关联,并且不再使用所生成的命令。