2016-09-27 6 views
1

Я новичок в C#, поэтому, возможно, все происходит неправильно. У меня есть два комбинированных блока. Когда у одного есть значение, другое всегда должно быть string.Empty. Моя проблема в том, что когда я изменяю значение в одном, я устанавливаю другое в string.Empty. Который, конечно, запускает это событие и устанавливает элемент управления, который я изменил, на string.Empty. Поэтому мне всегда нужно вводить значение дважды. Я пробовал несколько утверждений if, чтобы это не происходило, но ничего не сработало. Я использую ValueChanged. Должен ли я использовать какое-то другое событие?combo box Событие ValueChanged, влияющее на два cbos

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, это наследует от Infragistics UltraCombo, который реализует событие ValueChanged.

ответ

0

Хотя стандартные. WinForms используют события управления, Epicor ERP предназначен для реагирования на события изменения данных, такие как JobPart_Column.ColumnChanged. Этот 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; 
     } 
    } 
+0

Thanks Web. Мне нужно будет изменить это, чтобы работать со статическим классом (да, я использовал генератор кода) или изменить существующий класс, чтобы он больше не был статичным. Я вижу, мне нужно больше времени проводить с C#, поэтому мне не нужно использовать генератор кода. –