簡體   English   中英

更新數據網格 WPF 中的單個單元格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM