编辑字段后访问数据库不更新

时间:2014-05-26 17:02:52

标签: c# database oledb

我正在使用带有VS2010和Database Provider = OleDB的c#为计算机商店开发一个程序。 我需要一个表格来更新库存中的现有产品信息。所以我有一个DataGridView来显示产品表(Edit property = on)

我的更新行代码:

private void button1_Click(object sender, EventArgs e)
{
    con.Open();
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        DataGridViewRow UpdateRow = dataGridView1.Rows[i];
        if (UpdateRow.Selected == true)
        {
            try
            {
                com.CommandText = "UPDATE Products SET ProductName=@pname,Model=@model WHERE ProductID= " + UpdateRow.Cells[0].Value + "";
                com.Connection = con;
                com.Parameters.AddWithValue("@pname", UpdateRow.Cells[1].Value);
                com.Parameters.AddWithValue("@model", UpdateRow.Cells[2].Value);
                int count = com.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString()); 
            }
        }    
    }
    con.Close();
}

该代码有效,它会更新访问数据库文件,但它只适用于一行(所选行)

现在我想更新用户在DataGridView

中完成的所有修改

所以我所要做的就是删除if (UpdateRow.Selected == true),这样,循环将转到每一行并更新信息。

我调试了程序并且它没有崩溃,但Access数据库没有更新任何东西!我想知道为什么......

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现这一目标:

  1. 遵循数据集和数据表路由,将数据表分配给网格,然后使用getchanges()方法检索已更改的行,然后将所选行更新到数据库中

  2. 使用以下函数捕获已更改行的rowindex属性

     private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
          {
        // use  e.rowindex to get the row being modified and keep that in some list and 
    
         //after update button is pressed get the rows and update accordingly
       //
           }