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

C# 在更新DataGridView中的数据时遇到困难,c#,.net,winforms,C#,.net,Winforms,我有一个datagridview,它绑定到一个数据库。当我单击其中一个单元格以更新其值时,实际情况是该特定单元格的值被更新,但同一行的值也被更新为null。我该怎么做才能使同一行的值不更新为null,但保持原样 我的代码: int quantityColumnIndex = 0; string particularColumnIndex = ""; int rateColumnIndex = 0; private void buttonUpdate_Click(object sender, E

我有一个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);
  }
}

需要帮助

是否尝试分配新值

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

但是,如果datagrid绑定到datatable,则必须更新datatable中的值。

为什么要将
value
属性的结果强制转换为
DataGridViewCell
类型?为您提供单元格的值,而不是单元格本身的值。代码是错误的;确保您了解
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
}

是否可以检查数据库中是否也发生了相同的情况(将所有值更改为null,但编辑的值除外)

在运行时检查“result=dm.ExecuteActionQuery(SQL);”行上的变量值(quantityColumnIndex、SpecialColumnIndex和rateColumnIndex)


我认为除了刚才编辑的值之外,所有的值都将为null,因为您在dataGridViewOrderDetails\u CellValueChanged(..)方法中只更改了一个变量的值。因此,您需要为dataGridViewOrderDetails\u CellValueChanged函数中的所有变量赋值。

一种解决方案是将quantityColumnIndex、SpecialColumnIndex和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);
private void按钮更新\单击(对象发送者,事件参数e)
{
if((dataGridViewOrderDetails.Rows.Count-1>RowCount)==false)
{
对于(int i=0;i
  • [.net]相关文章推荐