组合框ValueChanged事件影响两个cbos

时间:2016-09-27 14:01:07

标签: c# epicorerp

我是C#的新手,所以我可能会犯这个错误。我有两个组合框。当一个有值时,另一个应该总是string.Empty。我的问题是,一旦我将其他值设置为string.Empty,我就更改了一个值。当然,这会触发该事件并将我更改的控件设置为string.Empty。所以我总是要输入两次值。我已经尝试了几个if语句来防止这种情况发生,但没有任何效果。我正在使用ValueChanged。我应该使用其他一些活动吗?

private static void cboJobDetailer_ValueChanged(object sender, System.EventArgs args)
{
    // ** Place Event Handling Code Here **
    if (cboJobDetailer.Value != string.Empty) {
        var edvJobPart = (EpiDataView)oTrans.EpiDataViews["JobPart"];
        edvJobPart.dataView[edvJobPart.Row]["BI_JobOutsourceID_c"] = string.Empty;
        cboOutsourceCo.Value = string.Empty;
    }
}

private static void cboOutsourceCo_ValueChanged(object sender, System.EventArgs args)
{
    // ** Place Event Handling Code Here **
    if (cboOutsourceCo.Value != string.Empty){
        var edvJobPart = (EpiDataView)oTrans.EpiDataViews["JobPart"];
        edvJobPart.dataView[edvJobPart.Row]["BI_JobDetailerID_c"] = string.Empty;
        cboJobDetailer.Value = string.Empty;
    }
}

在Epicor ERP中,组合框是Ice.Lib.Framework.EpiUltraCombo,它继承自实现ValueChanged事件的Infragistics UltraCombo。

1 个答案:

答案 0 :(得分:0)

虽然标准.Net WinForms使用控制事件,但Epicor ERP旨在响应数据更改事件,例如JobPart_Column.ColumnChanged。将在UI自定义脚本中为您定义此DataTable。

在任何情况下,为防止事件相互触发,请在更改代码中的数据时设置模块级别标志。然后在你的活动中对此进行测试,事件仍会激活,但不会做任何事情。

bool dataChangingInCode = false;

    public void InitializeCustomCode()
    {
        JobPart_Column.ColumnChanged += JobPart_ColumnChanged;
    }

    private void JobPart_ColumnChanged(object sender, DataColumnChangeEventArgs e)
    {
        if (dataChangingInCode) return;

        switch (e.Column.ColumnName)
        {
            case "BI_JobDetailerID_c":
                dataChangingInCode = true;
                e.Row["BI_JobOutsourceID_c"] = string.Empty;
                dataChangingInCode = false;
                break;
            case "BI_JobOutsourceID_c":
                dataChangingInCode = true;
                e.Row["BI_JobDetailerID_c"] = string.Empty;
                dataChangingInCode = false;
                break;
        }
    }