C# 在更新DataGridView中的数据时遇到困难
我有一个datagridview,它绑定到一个数据库。当我单击其中一个单元格以更新其值时,实际情况是该特定单元格的值被更新,但同一行的值也被更新为null。我该怎么做才能使同一行的值不更新为null,但保持原样 我的代码: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
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
查询中出现问题。此问题已解决:)什么“不起作用”是什么意思?为什么要注释掉块中的第二行?为什么要将
值
属性强制转换为DataGridViewCell
?需要帮助。嗯,我现在正在处理它。我尽了最大努力,但做不到。我注释了那些不起作用的行,然后删除,但忘了在这里删除。@AbidAli[非常礼貌的语气]他没有问你它是否仍然不起作用…他问你不忽略是什么意思我的新值是在编辑datagridview的单元格时。我如何以编程方式编写它?quantity.value=dataGridViewOrderDetails.Rows[e.RowIndex].Cells[1]。toString()?@Abid:我不明白这是什么意思。当你编辑单元格时,值会自动更新。如果你想将其设置为任意值,请用包含新值的变量替换100
。呃,要将一个单元格的值设置为另一个单元格的值,你可以执行cell1.value=cell2.value
@Abid:试试看调用DataGridView.EndEdit()
或DataGridView.Invalidate()
。您还没有告诉我们您的数据网格是否绑定到数据库。这会影响您的操作方式。请确保您已经阅读了DataGridView
控件的文档,而不是试图盲目摸索。好的。现在尝试删除dataGridViewOrderDetails\u CellVa中的所有if语句lueChanged(…)函数。你将使用ivowiblo的答案,但试图偷回代表赏金…?@Falkeron你完全错了,我的朋友,实际上我自己解决了错误并将其显示在这里,让人们知道这个问题已经解决:)如果有人偷了我的代表赏金,我没有问题。因为我不在乎:)
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);
}
}