Как проверить элементы управления внутри шаблона editform ASPxGridView?

У меня есть ASPxGridView с шаблоном редактирования формы и некоторые связанные элементы управления внутри. После обновления я хочу проверить, проверьте значения в элементах управления на стороне сервера. Насколько я мог найти, это невозможно. DevExpress рекомендует подписаться на событие RowUpdating, но это совершенно неверно. Бесполезно, так как очень сильно их так называемая поддержка. Проблема заключается в том, что если элементы управления содержат недопустимый текст, и оно вызывает исключение где-то задолго до RowUpdating, и оно съедается devexpress. Все, что возвращается клиенту, это какое-то сообщение типа "Входная строка была не в правильном формате". Я хочу проверить элементы управления вводом на стороне сервера. И да, я также проверяю строки, но это полезно только для проверки бизнес-логики. Итак, как проверить элементы управления, которые связаны внутри шаблона EditForm на стороне сервера?

2 ответа

Не могли бы вы уточнить? Вы хотите проверить значения после обновления или перед тем, как записывать значения в базу данных или каждый элемент управления по отдельности, поскольку он теряет фокус, прежде чем можно будет начать обновление? Если необходимо выполнить проверку на стороне сервера, я бы порекомендовал сделать это в обработчиках событий на стороне сервера RowUpdating и RowInserting, как это было рекомендовано DevExpress. Почему вы думаете, что это неправильно? Вы можете проверить значения каждого из связанных элементов управления в коллекции e.NewValues ​​событий Обновление и Вставка сетки. Если какое-либо из значений не прошло проверку, вы можете отменить действие обновления / вставки. Не могли бы вы описать желаемый рабочий процесс немного подробнее?

Предыдущий автор сказал, что взломать нужно, помещая контейнер в шаблон формы редактирования, что не соответствует действительности. Вы можете использовать сам шаблон формы редактирования через.NamingContainer любого элемента управления в шаблоне формы редактирования. Поместите вашу процедуру проверки в обработчик событий _Validation на стороне сервера для определенных элементов управления. Вы можете оценить элементы управления шаблоном как группу:

EditFormValid = ASPxEdit
  .AreEditorsValid(myGrid.FindEditFormTemplateControl("myControl")
  .NamingContainer);

Или вы можете обновить переменную класса во время проверки каждого элемента управления

public class foo
{
  bool EditFormValid = true;
  .
  .
  .
  void myControl_Validation(object sender, ValidationEventArgs e)
  {
    EditFormValid = EditFormValid && myControl.IsValid;
  }

  void myGrid_RowUpdating(object sender, ASPxDataUpdatingEventArgs e)
  {
    If(EditFormValid)
    {
      .
      .
      .
    }
    else e.Cancel = true;
  }
}

Я нашел DevExpress чрезвычайно эффективным и гибким. Однако гибкость может быть мечом с двумя лезвиями, так как есть много способов сделать почти все, что вам нужно, большую часть времени, но обычно это один из способов сделать все, что вам нужно, все время. Разработчик может легко опираться на то, что работает в одном случае, но это не обязательно является правильным / оптимальным методом, и может прийти к точке, когда они закодированы в угол, продолжая строить проект.

Если вы можете предоставить больше подробностей, я тоже

Насколько я знаю, это невозможно сделать. Средства управления Devexpress оставляют желать лучшего. Нет способа проверить, была ли проверка успешной. Очевидно, большая проблема. Что вы можете сделать, это снова запустить проверку с ASPxEdit.AreEditorsValid(). Но для этого вам придется немного взломать (как всегда с devexpress). Поместите контейнер в форму редактирования, подойдет простой div с runat="server" и ID. Это твой контейнер. Чем получить его div с FindEditFormTemplate() и использовать его в ASPxEdit.AreDitorsValid(). Этот обходной путь имеет недостатки:

  • загромождает ваш код aspx ненужными элементами
  • выполнение страницы на стороне сервера медленнее
  • рендеринг страниц на стороне браузера медленнее
  • ValidateEditorsIncontainer() снова запускает проверку, так что происходит значительное снижение производительности

Все вышеперечисленное является товарным знаком DevExpress. Но посмотрите на это с яркой стороны. Их сетка иногда требует до пяти ненужных обращений к серверу и базе данных, чтобы начать редактирование.

Другие вопросы по тегам