请教一下,下述库存,我设定的公式,是在cellendedit事件下面,本意是操作员完成单元格的数据编辑后,就是触发计算公式,但在实际操作时,需要操作人员输入完成后,还要再反复点击单元格,才会计算,很不方便,请问能否实现,一发现数据有变化,或有新行出现,立即就能触发计算呢,方便实际操作,请指导一下;
```c#
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (e.RowIndex < 1)
{
MessageBox.Show("请从第二行录入数据");
return;
}
string PreMaterial = dataGridView1.Rows[e.RowIndex - 1].Cells[2].Value.ToString();
string CurMaterial = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
if (PreMaterial != CurMaterial )
{
return;
}
else
{
if (e.RowIndex > 0) // 不是第一行
{
int rowIndex = e.RowIndex;
decimal 上一行结存数量 = Convert.ToDecimal(dataGridView1.Rows[rowIndex - 1].Cells[6].Value);
decimal 当前行入库数量, 当前行出库数量;
if (dataGridView1.Rows[rowIndex].Cells[4].Value == DBNull.Value)
{
当前行入库数量 = 0;
}
else
{
当前行入库数量 = Convert.ToDecimal(dataGridView1.Rows[rowIndex].Cells[4].Value);
}
if (dataGridView1.Rows[rowIndex].Cells[5].Value == DBNull.Value)
{
当前行出库数量 = 0;
}
else
{
当前行出库数量 = Convert.ToDecimal(dataGridView1.Rows[rowIndex].Cells[5].Value);
}
decimal 当前行结存数量 = 上一行结存数量 + 当前行入库数量 - 当前行出库数量;
当前行结存数量 = Math.Round(当前行结存数量, 2, MidpointRounding.AwayFromZero);
//当前行结存数量 = (float)Math.Round(上一行结存数量, 2);
dataGridView1.Rows[rowIndex].Cells[6].Value = 当前行结存数量.ToString("0.00");
//dataGridView1.Rows[rowIndex].Cells[6].Value = 上一行结存数量.ToString("0.00");
}
}
}
}
```
把 DataGridView 的 EditMode 属性改为 DataGridViewEditMode.EditOnKeystroke 试试看
【以下回答由 GPT 生成】
在DataGridView控件的CellEndEdit事件中实现即时触发计算公式的功能可以通过以下步骤来实现:
```javascript private void CalculateFormula(int rowIndex) { // 获取当前行的数据
// 根据需要的单元格数据,进行计算公式逻辑
// 更新需要展示计算结果的单元格的值
} ```
javascript dataGridView1.CellValueChanged += (s, e) => CalculateFormula(e.RowIndex);
```javascript private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { // 确保行数大于0 if (e.RowIndex < 0) { return; }
// 调用CalculateFormula方法
CalculateFormula(e.RowIndex);
} ```
这样,当操作员完成单元格的数据编辑时,CalculateFormula方法会被立即调用,从而触发计算公式,并更新需要展示计算结果的单元格的值。
如果需要在新行增加时也触发计算公式,可以在DataGridView的RowsAdded事件中调用CalculateFormula方法,如下所示:
javascript dataGridView1.RowsAdded += (s, e) => CalculateFormula(e.RowIndex);
这样,当有新行增加时,CalculateFormula方法也会被立即调用,触发计算公式。