2015-10-01 2 views
1

Я работаю над проверкой данных с помощью класса DxErrorProvider. Данные проверяются в ячейках GridControl с помощью события ValidatingEditor. Он отлично работает, однако один из столбцов очень плотный, поэтому, когда я хочу показать ошибку в ячейке этого столбца, я пытаюсь изменить ширину. Эти действия заставляют DxErrorProvider (возможно) показывать сообщение об ошибке в окне сообщений вместо симпатичного круга с «x» в ячейке.DxErrorProvider отображает сообщение об ошибке в окне сообщений при изменении ширины

Ниже вы можете увидеть мою реализацию обработчика событий.

private void ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) 
{ 
    GridView view = sender as GridView; 
    if (view.FocusedColumn.FieldName == "COLUMN1") 
    { 
     if (e.Value is bool) 
     { 
      GridColumn column = view.GetDataSourceItem<MyClass>(view.FocusedRowHandle); 

      if (Names.Any(x => x.FieldName == column.FieldName) && !((bool)e.Value)) 
      { 
       // These 2 lines make errorprovider go crazy 
       //view.FocusedColumn.MaxWidth += 50; 
       //view.FocusedColumn.Width += 30; 
       e.Valid = false; 
       e.ErrorText = "The error"; 
      } 
      else 
      { 
       e.Valid = true; 
       //view.FocusedColumn.Width -= 30; 
       //view.FocusedColumn.MaxWidth -= 50; 
      } 
     } 
     else 
     { 
      e.Valid = false; 
      e.ErrorText = "Invalid value"; 
     } 
    } 
} 

Как я могу сохранить поведение по умолчанию DxErrorProvider ((х)) и изменить ширину столбца.

ответ

2

Ссылка не распространяется на DxErrorProvider. Следующие шаги описывают причину проблемы:

0. Когда вы собираетесь редактировать ячейку, объект редактора создается вместо ячейки. Этот редактор основан на BaseEdit потомках класса и называется редактором на месте. Вы можете получить этот редактор через свойство ColumnView.ActiveEditor.
1. Когда вы проверяете ячейку, редактор на месте фактически проверяется, и этот символьный круг с «x» отображается в редакторе вместо ячейки.
2. Но когда вы меняете ширину столбца, редактор закрывается, поэтому нет места для отображения круга, и это приводит к тому, что вместо этого появляется окно с сообщением.

Итак, простым обходным путем является отображение редактора после изменения ширины столбца. Для этого вы можете использовать метод GridView.ShowEditor. Также вам нужно поместить в этот редактор значение проверки.
Вот пример:

private void ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) 
{ 
    GridView view = sender as GridView; 
    if (view.FocusedColumn.FieldName == "COLUMN1") 
    { 
     if (e.Value is bool) 
     { 
      GridColumn column = view.GetDataSourceItem<MyClass>(view.FocusedRowHandle); 

      if (Names.Any(x => x.FieldName == column.FieldName) && !((bool)e.Value)) 
      { 
       // These 2 lines make errorprovider go crazy 
       view.FocusedColumn.MaxWidth += 50; 
       view.FocusedColumn.Width += 30; 

       view.ShowEditor(); 
       view.ActiveEditor.EditValue = e.Value; 

       e.Valid = false; 
       e.ErrorText = "The error"; 
      } 
      else 
      { 
       e.Valid = true; 

       view.FocusedColumn.Width -= 30; 
       view.FocusedColumn.MaxWidth -= 50; 
      } 
     } 
     else 
     { 
      e.Valid = false; 
      e.ErrorText = "Invalid value"; 
     } 
    } 
} 

P.S .: Кроме того, вы можете рассмотреть возможность использования ColumnView.ValidateRow события вместо этого.

+0

Наконец-то было время, чтобы вернуться к этой проблеме. Ваш пример работает по назначению, спасибо. – user2475983

Смежные вопросы