在 DataGridView 中更新数据时遇到困难

本文关键字:遇到 数据 DataGridView 更新 | 更新日期: 2023-09-27 18:18:06

我有一个datagridview,它绑定到一个数据库。当我单击其单元格之一以更新其值时,实际上发生的情况是该特定单元格的值已更新,但同一行的值也更新为null。我该怎么做才能使同一行的值不会更新为 null 而保持原样?

我的代码 :

int quantityColumnIndex = 0;
string particularColumnIndex = "";
int rateColumnIndex = 0;
private void buttonUpdate_Click(object sender, EventArgs e)
{
  {
    string SQL = "Update OrderLineItems set Quantity = " + quantityColumnIndex +
                 ", Particular = '" + particularColumnIndex +
                 "', Rate = " + rateColumnIndex + " where OrderLineItems.Id = " + Id;
    result = dm.ExecuteActionQuery(SQL);
  }
  if (result > 0)
  {
    MessageBox.Show("Record Updated Successfully", "Update Record", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }
}
private void dataGridViewOrderDetails_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
  if (e.ColumnIndex == 1)
  {
    quantityColumnIndex = Convert.ToInt32(dataGridViewOrderDetails.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
  }
  if (e.ColumnIndex == 2)
  {
    particularColumnIndex = dataGridViewOrderDetails.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
  }
  if (e.ColumnIndex == 3)
  {
    rateColumnIndex = Convert.ToInt32(dataGridViewOrderDetails.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
  }
}

需要帮助

在 DataGridView 中更新数据时遇到困难

一种解决方案是将 quantityColumnIndex、specificColumnIndex 和 rateColumnIndex 更改为可为空值,并更改查询,使其不会更新未更改的列。

我想你知道哪一行是正在编辑的行。如果不这样做,则当用户更改值但选择另一行时,将会遇到麻烦。因此,如果您知道该行,我认为更好的选择是将查询更改为:

var row = dataGridViewOrderDetails.Rows[rowNumber];
string SQL = "Update OrderLineItems set Quantity = " + Convert.ToInt32(row.Cells[1].Value); + ", Particular = '" + row.Cells[2].Value.ToString() + "', Rate = " + Convert.ToInt32(row.Cells[e.ColumnIndex].Value)+ " where OrderLineItems.Id = " + Id;
result = dm.ExecuteActionQuery(SQL);

您是否尝试过分配新值?

if (e.ColumnIndex == 1)
        {
          dataGridViewOrderDetails.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 5;
        }

但是,如果数据网格绑定到数据表,则必须更新数据表中的值。

为什么要将 Value 属性的结果强制转换为DataGridViewCell类型?Value属性为您提供单元格的值,而不是单元格本身。代码错误;确保您了解 DataGridView 控件的对象模型。

请改为尝试以下代码:

if (e.ColumnIndex == 1)
{
    // Get a reference to the cell of interest.
    DataGridViewCell quantity = dataGridViewOrderDetails.Rows[e.RowIndex].Cells[e.ColumnIndex];
    // Update its value.
    quantity.Value = 100;  // or whatever your new value is
}

您能否检查数据库中是否也发生了同样的事情(将所有值更改为空值,但您编辑的值除外(。

在运行时检查变量(quantityColumnIndex,particularColumnIndex 和 rateColumnIndex (的值,行 "result = dm.ExecuteActionQuery(SQL(;"。

我认为除了您刚刚编辑的值之外,所有值都将为空,因为您只更改了 dataGridViewOrderDetails_CellValueChanged(..( 方法中的一个变量的值。因此,您需要为 dataGridViewOrderDetails_CellValueChanged 函数中的所有变量赋值。

private void buttonUpdate_Click(object sender, EventArgs e)
        {
            if ((dataGridViewOrderDetails.Rows.Count - 1 > RowCount) == false)
            {
                for (int i = 0; i < dataGridViewOrderDetails.RowCount - 1; i++)
                {
                    string SQL = "Update OrderLineItems set Quantity = " + dataGridViewOrderDetails.Rows[i].Cells[1].Value +
                        ", Particular = '" + dataGridViewOrderDetails.Rows[i].Cells[2].Value + "', Rate = " + dataGridViewOrderDetails.Rows[i].Cells[3].Value + " where OrderLineItems.Id = " + dataGridViewOrderDetails.Rows[i].Cells[0].Value;
                    result = dm.ExecuteActionQuery(SQL);
                }
            }

查询中存在问题。这已经解决了:)