如何执行“取消绑定表达式”并在有界列中设置该值



我的任务是,我有两个有界列(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()

最新更新