namespace WindowsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=123;database =yxw;Integrated Security=True");        private void button1_Click(object sender, EventArgs e)
        {
            string qid = tb_id.Text;            string qName = tb_Name.Text;            string qAge = tb_Age.Text;            string qemail = tb_email.Text;            string qAddress = tb_Address.Text;                //SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=123;database =yxw;Integrated Security=True");                SqlCommand cmd = new SqlCommand("Insert Into tb1( ID,Name,Age,email,Address) values('" + qid + "','" + qName + "','" + qAge + "','" + qemail + "','" + qAddress + "')", con);                cmd.Connection = con;                con.Open();                if (cmd.ExecuteNonQuery() > 0)
                {
                    SqlDataAdapter da = new SqlDataAdapter("select * from tb1", con);                    DataSet ds = new DataSet();                    //调用 DataAdapter 的 Fill 方法,并传入将要在其中加载数据的 DataSet 或 DataTable 例如:                    //sqlDataAdapter1.Fill(dataset1.Tables["Customers"]);                    da.Fill(ds, "tb1");                    dataGridView1.DataSource = ds.Tables["tb1"];
                }                con.Close();        }        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“yxwDataSet.tb1”中。您可以根据需要移动或移除它。            this.tb1TableAdapter.Fill(this.yxwDataSet.tb1);
   
        }        private void button2_Click(object sender, EventArgs e)
        {            int j = dataGridView1.SelectedRows.Count;            int k = dataGridView1.RowCount;            if (MessageBox.Show("您确认要删除这 " + Convert.ToString(j) + "项吗? ", "系统提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)     //   删除前给出提示 
            {            }
            else
            {
                for (int i = 0; i < (k-1); i++)
                {                    if (dataGridView1.Rows[i].Selected)
                    {
                        dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
                    }
                }
            }
            
        }
    }
}
我现在能实现在控件dataGridView中删除整行数据了但是怎么才能同时也删除数据空中相应行的数据呢?请帮忙给出具体代码谢谢~!

解决方案 »

  1.   


      if (MessageBox.Show("您确认要删除这 " + Convert.ToString(j) + "项吗? ", "系统提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)     //   删除前给出提示 
                {            }
                else
                {
                    con.open();
                    SqlCommand cmd=con.CreateCommand();
                    for (int i = 0; i < (k-1); i++)
                    {                    if (dataGridView1.Rows[i].Selected)
                        {
                           string str=datagridview1.rows[i,?].value.tostring();//这里?为定义的Key字段列
                            cmd.CommandText="Delete * from Table where ID='"+str+"'";
                            cmd.excu.....();//执行SQL语句;
                               dataGridView1.Rows.Remove(dataGridView1.Rows[i]);//删除行
                               cmd.dispose();//释放cmd,不然会产生I个cmd;
                        }
                    }
                    con.close();//关闭连接
                }
      

  2.   

    如果你DataGridView是帮定到yxwDataSet的话
    那你改正如下
    for (int i = 0; i < (k-1); i++)
                    {                    if (dataGridView1.Rows[i].Selected)
                        {
    yxwDataSet.Table[0].Row[i].Deleted()//记住要把DataSet中把要删除的行标记为Deleted
                        }
    }
    最后在去调用SqLDataAdapter.Update(yxwDataSet)来把删除的更新到数据库中还有你写的那段代码
    dataGridView1.Rows.Remove(dataGridView1.Rows[i]);直接用Remove的话最后会出现错误的
      

  3.   

    2楼的那个省略号是cmd.ExecuteNonQuery()
      

  4.   

    if (MessageBox.Show("您确认要删除这 " + Convert.ToString(j) + "项吗? ", "系统提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)     //   删除前给出提示 
                {            }
                else
                {
                    con.open();
                   for (int i = 0; i < (k-1); i++)
                    {                    if (dataGridView1.Rows[i].Selected)
                        {
                           SqlCommand cmd=con.CreateCommand();//改下,把这个放里面来。                       string str=datagridview1.rows[i,?].value.tostring();//这里?为定义的Key字段列
                            cmd.CommandText="Delete * from Table where ID='"+str+"'";
                            cmd.excu.....();//执行SQL语句;
                               dataGridView1.Rows.Remove(dataGridView1.Rows[i]);//删除行
                               cmd.dispose();//释放cmd,不然会产生I个cmd;
                        }
                    }
                    con.close();//关闭连接
                }
      

  5.   

    1楼的同志能不能具体解释下 那个“?”号具体含义?
    就是这段“string str=datagridview1.rows[i,?].value.tostring();//这里?为定义的Key字段列”该怎么定义Key字段列?
      

  6.   

    这里?为定义的Key字段列
      

  7.   

    就是提取第i行,第N列的值作为索引来删除数据库中的数据。比如在datagridview里第1列为数据库中的主索引字段,那么就提取
    rows[i,0].value.tostring();以此为索引去删除数据库中的数据
      

  8.   

    string str=dataGridView1.Rows[i,0].Value.ToString()如果把?改成具体数值的时候也会出错啊 提示错误 1 “this”方法没有采用“2”个参数的重载 
      

  9.   

    dataGridView1.Rows[i].Cells[j].Value.ToString();这个没错了
      

  10.   

    在执行操作的时候提示第 1 行: '*' 附近有语法错误。
    我估计是下面这段错了到底在哪我还没找到 郁闷了~!
    cmd.CommandText="Delete * from Table where ID='"+str+"'";
    cmd.ExecuteNonQuery();
      

  11.   

    那个是SQL语句的问题,*号这里,不知道是空格还是怎么的,以前刚学也经常这样的,呵呵。
    你看看把*去掉就行了
      

  12.   

    sjm2003感谢你的帮助 但是你看清楚我的题目了吗?你的这个怎么还是只能删除dataGridView空间中显示的数据啊 我的题目是“我现在能实现在控件dataGridView中删除整行数据了但是怎么才能同时也删除数据空中相应行的数据呢?请帮忙给出具体代码谢谢~!”啊
      

  13.   

    唉,你咋不明白呢。我无语啊!SqlCommand cmd=con.CreateCommand();//
    string str=datagridview1.rows[i,?].value.tostring();//这里?为定义的Key字段列
    cmd.CommandText="Delete * from Table where ID='"+str+"'";
    cmd.excu.....();//执行SQL语句;
    dataGridView1.Rows.Remove(dataGridView1.Rows[i]);//删除行
    cmd.dispose();//释放cmd,不然会产生I个cmd;我加的这些代码不行吗?你有没有加进去啊?你写的是没有数据操作,所以才会只删除datagridview中的数据!
      

  14.   

    还有就是
    if (MessageBox.Show("您确认要删除这 " + Convert.ToString(j) + "项吗? ", "系统提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)你要的是选YES删除数据,还是NO删除数据啊???????????????????????
      

  15.   

    cmd.CommandText="Delete * from Table where ID='"+str+"'";如果把这段代码的SQL语句中的ID='"+str+"'改成固定值比如ID='003'
    这样的话就可以删除数据库表中ID是003这一行了是不是这段 string str=dataGridView1.Rows[i].Cells[j].Value.ToString();这段代码中的str定义的问题?
      

  16.   

    if (MessageBox.Show("您确认要删除这 " + Convert.ToString(j) + "项吗? ", "系统提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 这个是控制按钮返回值的管数据库什么事情~~~???????
      

  17.   

     if (MessageBox.Show("您确认要删除这 " + Convert.ToString(j) + "项吗? ", "系统提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 这个是控制按钮返回值的管数据库什么事情~~~???????默认对话框 选择NO 你学过基础编程吗? 
      

  18.   

    1.你在执行删除datagridview数据同时将命令提交到服务器。然后你可刷新数据,或者直接在datagridview那删除一行(需判断提交到服务器是否成功了)
    2.使用楼上sjm2003的代码
    [引]
    如果你DataGridView是帮定到yxwDataSet的话
    那你改正如下
    for (int i = 0; i < (k-1); i++)
                    {                    if (dataGridView1.Rows[i].Selected)
                        {
    yxwDataSet.Table[0].Row[i].Deleted()//记住要把DataSet中把要删除的行标记为Deleted
                        }
    }
    最后在去调用SqLDataAdapter.Update(yxwDataSet)来把删除的更新到数据库中还有你写的那段代码
    dataGridView1.Rows.Remove(dataGridView1.Rows[i]);直接用Remove的话最后会出现错误的
      

  19.   

    我没说关数据库什么事情,你看清偶说的话,我是提醒你,你写的是对话框选择按钮NO的时候才删除数据。我试了我给你的代码,完全可以解决你的问题,唉,无语。下面是测试的代码,无问题。 private OledbConnection cn=new OledbConnection("....");//定义CN
     .......;//窗体构造代码 略
     private void button1_Click(object sender, EventArgs e)
            {
                if (dataGridView1.Rows.Count > 0)
                {
                    try
                    {                    
                        cn.Open();//打开数据库
                        for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
                        {
                            if (dataGridView1.Rows[i].Selected == true)
                            {
                                OleDbCommand  cmd = cn.CreateCommand();
                                cmd.CommandText = "Delete from TbStoreChanpinxinxi where St_CPID='" + dataGridView1.Rows[i].Cells[0].Value.ToString().Trim() + "'";//把这SQL语句改成你的。我用的是ACCESS。
                                if (cmd.ExecuteNonQuery() > 0)
                                {
                                    MessageBox.Show("第"+i.tostring()+"条数据删除成功");//测试用 ,看看自己写的循环能循环几次,是否和选择的数据条数相同
                                        dataGridView1.Rows.RemoveAt(i);//删除被选中的行。
                                }
                                cmd.Dispose();
                            }
                        }
                        cn.Close();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }