[英]Update single cell in datagrid WPF
我的 WPF 应用程序中有一个数据网格。 在一个列中,我有一个 int(列名 = Amount)。
例如,单元格中会有一个数字“4”。 我可以将 DataGrid 中的“4”编辑为“3”。
编辑后,我将按下“更新”按钮,以便我的数据库列金额将被更新。
它正在工作,但它将 Amount 列中的所有单元格更新为所选行的 Id 号。
这是我在 de xaml.cs 文件中的代码:
private void Update(object sender, RoutedEventArgs e)
{
DataRowView o = (DataRowView)g2.SelectedItem;
int Amount= Convert.ToInt32(o.Row.ItemArray[0]);
try
{
const string query = @"UPDATE [Stock] SET [STOCK].Amount = @Aantal;";
using (SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"...."))
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.Add("@Amount", SqlDbType.Int).Value = Amount;
con.Open();
cmd.ExecuteNonQuery();
}
MessageBox.Show("Update complete");
binddatagrid();
}
catch (Exception ex)
{
MessageBox.Show("Error occurred:\r\n" + ex.Message);
}
}
我究竟做错了什么?
您的数据库查询正在更新[Stock]
表中每一行的Amount
列。 您需要在数据库查询中添加WHERE
子句,以便仅更新数据库中与DataGrid
中选定行相对应的[Stock]
行。
我不知道您的数据库架构是什么样的,但我假设[Stock]
表有一个Id
列。 如果是这样,查询可能如下所示:
UPDATE [Stock] SET [Stock].Amount = @Anatal WHERE [Stock].Id = @Id
请注意,查询现在有第二个参数@Id
。 这意味着您需要以与当前获取Amount
相同的方式从所选行获取Id
。
int id = Convert.ToInt32(o.Row.ItemArray[1]);
我使用o.Row.ItemArray[1]
,但我不知道Id
实际存储在哪个索引处。 您必须使用该索引来获取正确的Id
。
由于您的查询有第二个参数,因此您还需要将其添加到SqlCommand
实例的Parameters
集合中。 就像您对 Am Amount
所做的那样。
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.