影响两个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。
标准的。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;
}
}