影响两个cbo的组合框ValueChanged事件

本文关键字:组合 ValueChanged 事件 cbo 两个 影响 | 更新日期: 2023-09-27 18:09:07

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

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。

影响两个cbo的组合框ValueChanged事件

标准的。net WinForms使用控制事件,而Epicor ERP被设计为响应数据更改事件,例如JobPart_Column.ColumnChanged。这个DataTable将在UI自定义脚本中为您定义。

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

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;
        }
    }