0

我有一个DatagridView,用户对其应用过滤器(存储在Datatable.DefaultView.RowFilter),这意味着屏幕中的行数会改变,在这种情况下,“TotalCost”变量必须改变,但它保持相同的值,因为我申请” Compute-(sum)“而那个方法正在占尽一切Datatable。我能做些什么来解决这个问题?我正在使用 32000 多行,所以for loop如果可以的话,我想避免做一个。

4

1 回答 1

1

使用CellValidatingDataGridView 事件。

有了它,您可以获得单元格的旧值和新值。

private void myDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
   oldValue = (int)myDataGridView["yourColumn", e.RowIndex].Value;
   //or
   oldValue = (int)myDataGridView[columnIndex, e.RowIndex].Value;
   //or
   oldValue = (int)myDataGridView[e.ColumnIndex, e.RowIndex].Value;
   newValue = (int)e.FormattedValue;

            
   totalCost = totalCost - oldValue;
   totalCost = totalCost + newValue;
}

RowsAdded用户添加行时使用事件

private void myDataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    newValue =(int)myDataGridView["yourColumn", e.RowIndex].Value;
    totalCost = totalCost + newValue;
}

UserDeletingRow当用户删除一行时使用事件

private void myDataGridView_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    oldValue = (int)myDataGridView["yourColumn", e.Row.Index].Value;
    totalCost = totalCost - oldValue;
}
于 2021-07-14T20:33:35.050 回答