我的任务是,我有两个有界列(DiscountPercentage和DiscountAmount)。如果我更改DiscountPercentage中的值,则会自动计算和显示DiscountAmount,并且如果我更改了DiscountAmount,则需要计算DiscountPercent。所以我创建了两个无界列(百分比,金额),我通过无界表达式在那里计算。但我不会设置如果我点击键盘上的"选项卡"按钮。然后我创建了"FocusedRowchanged"事件,并在那里编写代码来设置Bounded列中的值。我到下一排的时候它就开始了。但我需要在将当前单元格立即更改为下一个单元格时设置/更新。
我的代码是
private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
// % to amt
object obj = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountPercentage"]) == DBNull.Value
? 0
: (gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountPercentage"]));
decimal a = Convert.ToDecimal(obj);
if (a > 0)
{
percentage.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
percentage.UnboundExpression = "[UnitPrice] * ([DiscountPercentage] / 100.0)";
}
// amt to %
object dm = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountAmount"]) == DBNull.Value
? 0
: (gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountAmount"]));
decimal a1 = Convert.ToDecimal(dm);
if (a1 > 0)
{
amount.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
amount.UnboundExpression = "Round(([DiscountAmount] / [UnitPrice]) * 100.0, 2)";
}
}
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
// % to amt
object obj = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountPercentage"]) == DBNull.Value
? 0
: (gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountPercentage"]));
decimal a = Convert.ToDecimal(obj);
if (a > 0)
{
object obj2 = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["gridColumn1"]);
int aa = Convert.ToInt32(obj2);
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountAmount"], aa);
}
// amt to %
object dm = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountAmount"]) == DBNull.Value
? 0
: (gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountAmount"]));
decimal a1 = Convert.ToDecimal(dm);
if (a1 > 0)
{
object obj3 = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["gridColumn2"]);
int aa2 = Convert.ToInt32(obj3);
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["DiscountPercentage"], aa2);
}
}
例如,如果价格=1000折扣百分比=5,则自动将DiscountAmount设置为50DiscountAmount=100,然后自动将DiscountPercentage设置为10
我需要在同一排表演吗?如何完成我的任务?提前感谢。
您可以在不使用未绑定列的情况下完成此操作,这里有一个示例(我已经测试过了,它运行良好)
private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
{
var row = gridView1.GetFocusedDataRow();
// Calculating the dicsount %
if (e.Column == colDiscountAmout)
{
var productPrice = Convert.ToDecimal(row["Price"]);
var discountAmout = Convert.ToDecimal(row["DiscountAmout"]);
row["DiscountPercent"] = (discountAmout * 100) / productPrice;
}
// Calculating the discount amount
if (e.Column == colDiscountPercent)
{
var productPrice = Convert.ToDecimal(row["Price"]);
var discountPercent = Convert.ToDecimal(row["DiscountAmout"]);
row["DiscountAmout"] = productPrice * (discountPercent / 100);
}
}
在DataGridView.CellEndEdit
事件期间尝试在底层数据源上调用.AcceptChanges()
。