我正在使用带有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数据库没有更新任何东西!我想知道为什么......
答案 0 :(得分:0)
有两种方法可以实现这一目标:
遵循数据集和数据表路由,将数据表分配给网格,然后使用getchanges()方法检索已更改的行,然后将所选行更新到数据库中
使用以下函数捕获已更改行的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
//
}