更新数据网格 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;