在datagridview中编辑成功,但它不更新某个列

时间:2013-09-25 04:39:44

标签: c# winforms ms-access datagridview

我已经可以编辑数据库中的数据了。但是我遇到了问题,当我在datagridview中编辑和更新Quantity列时,它应该根据Total更新datagridview中的Quantity * SubTotal列,但它只更新{ {1}}列,而不是Price。

我哪里做错了?

以下是截图:

enter image description here

正如您在行“1”中看到的那样,Quantity为100而Quantity为10000,因此SubTotal将为1000000.但是在行“2”中,在数据网格视图中编辑之前Total,数量为Quantity100为2000000,当我将Total更改为500时,{{1}仍然是2000000,Quantity应该是10000000。

我哪里做错了?

这是代码(我根据需要发布代码):

Total

Total不在datagridview中时,private void Updated(object sender, EventArgs e) { DataTable _dt = (DataTable)dataGridView1.DataSource; if (_dt.DefaultView.Count > 0) { int rowNum = dataGridView1.CurrentRow.Index; string productCode = Convert.ToString(_dt.DefaultView[rowNum]["ProductCode"]); int quantity = Convert.ToInt32(_dt.DefaultView[rowNum]["Quantity"]); int price = Convert.ToInt32(_dt.DefaultView[rowNum]["SubTotal"]); int _price = Convert.ToInt32(_dt.DefaultView[rowNum]["Total"]); using (OleDbConnection conn = new OleDbConnection(connectionString)) { string _commandSelect = "SELECT [Quantity], [SubTotal], [Total] FROM [TransRecord] WHERE [ProductCode] = @ProductCode"; string commandUpdate = "UPDATE [Record] SET [Quantity] = @Quantity, [SubTotal] = @SubTotal, [Total] = @Total WHERE [ProductCode] = @ProductCode"; string _commandUpdate = "UPDATE [TransRecord] SET [Quantity] = @Quantity, [SubTotal] = @SubTotal, [Total] = @Total WHERE [ProductCode] = @ProductCode"; conn.Open(); using (OleDbCommand cmdUpdate = new OleDbCommand(_commandUpdate, conn)) using (OleDbCommand _cmdSelect = new OleDbCommand(_commandSelect, conn)) using (OleDbCommand _cmdUpdate = new OleDbCommand(commandUpdate, conn)) { _cmdSelect.Parameters.Add("@ProductCode", System.Data.OleDb.OleDbType.VarChar); _cmdSelect.Parameters["@ProductCode"].Value = productCode; cmdUpdate.Parameters.Add("@Quantity", System.Data.OleDb.OleDbType.Integer); _cmdUpdate.Parameters.Add("@Quantity", System.Data.OleDb.OleDbType.Integer); cmdUpdate.Parameters.Add("@SubTotal", System.Data.OleDb.OleDbType.Integer); _cmdUpdate.Parameters.Add("@SubTotal", System.Data.OleDb.OleDbType.Integer); cmdUpdate.Parameters.Add("@Total", System.Data.OleDb.OleDbType.Integer); _cmdUpdate.Parameters.Add("@Total", System.Data.OleDb.OleDbType.Integer); using (OleDbDataReader dReader = _cmdSelect.ExecuteReader()) { while (dReader.Read()) { cmdUpdate.Parameters.Add("@ProductCode", System.Data.OleDb.OleDbType.VarChar); _cmdUpdate.Parameters.Add("@ProductCode", System.Data.OleDb.OleDbType.VarChar); cmdUpdate.Parameters["@ProductCode"].Value = productCode; cmdUpdate.Parameters["@Quantity"].Value = quantity; cmdUpdate.Parameters["@SubTotal"].Value = price; cmdUpdate.Parameters["@Total"].Value = _price; _cmdUpdate.Parameters["@ProductCode"].Value = productCode; _cmdUpdate.Parameters["@Quantity"].Value = quantity; _cmdUpdate.Parameters["@SubTotal"].Value = price; _cmdUpdate.Parameters["@Total"].Value = _price; int numberOfRows = _cmdUpdate.ExecuteNonQuery(); int _numberOfRows = cmdUpdate.ExecuteNonQuery(); } dReader.Close(); } } conn.Close(); } } private void UpdatePrice(object sender, EventArgs e) { if (numericTextBox1.TextLength >= 6) { decimal quantity = Convert.ToInt32(this.numericUpDown1.Value); decimal price = Convert.ToDecimal(this.numericTextBox2.Text); int total = Convert.ToInt32(quantity * price); if (numericUpDown1.Value > 0) { this.numericTextBox3.Text = total.ToString(); } } } 正在运行,它位于此处(如屏幕截图所示):

enter image description here

但是当它转到datagridview并且我更改Total时,它不会根据Quantity更新Total

感谢您的帮助和回答!

非常感谢!

1 个答案:

答案 0 :(得分:0)

为了使用正确的结果更新网格,您需要做两件事:第一步是更新数据集中的Total。第二种是将网格重新绑定到更新的数据集。最常见的方法是将数据源设置为null,然后再将数据集设置为数据集。我还建议你查看你的sql语句,特别是cmdSelect。它从未使用过。
修改
请查看EditModeCellEndEdit事件。开始编辑网格应该是一个好的开始。 EditMode指定何时编辑单元格,cellEndEdit事件可用于更新网格中的数据。