更新数据网格 WPF 中的单个单元格
Update single cell in datagrid WPF
我的 WPF 应用程序中有一个数据网格。在一列中,我有一个 int (column name = Amount
).
例如,单元格中会有一个数字“4”。我可以将 DataGrid 中的“4”编辑为“3”。
编辑后,我将按下“更新”按钮,这样我的数据库列 Amount
就会更新。
它正在工作,但它会将 Amount
列中的所有单元格更新为所选行的 ID 号。
这是我在 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]
table 中每一行的 Amount
列。您需要向数据库查询添加一个 WHERE
子句,以便您只更新数据库中与 DataGrid
.
中所选行相对应的 [Stock]
行
我不知道您的数据库架构是什么样的,但我假设 [Stock]
table 有一个 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
集合中。就像你如何处理 Amount
.
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;
我的 WPF 应用程序中有一个数据网格。在一列中,我有一个 int (column name = Amount
).
例如,单元格中会有一个数字“4”。我可以将 DataGrid 中的“4”编辑为“3”。
编辑后,我将按下“更新”按钮,这样我的数据库列 Amount
就会更新。
它正在工作,但它会将 Amount
列中的所有单元格更新为所选行的 ID 号。
这是我在 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]
table 中每一行的 Amount
列。您需要向数据库查询添加一个 WHERE
子句,以便您只更新数据库中与 DataGrid
.
[Stock]
行
我不知道您的数据库架构是什么样的,但我假设 [Stock]
table 有一个 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
集合中。就像你如何处理 Amount
.
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;