我是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。
答案 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;
}
}