Проверка двух дюжин значений, текстовых полей по столбцам данных, алгоритмически - PullRequest
0 голосов
/ 03 марта 2009

Ладно, большие мозги - это нечто большее, чем просто требование. Я немного озадачен. Мне обычно просто нужно подталкивать в правильном направлении, так что приготовьте свои подталкивающие палочки.

У меня есть вкладка, покрытая текстовыми полями. Я хочу выполнить проверку содержимого всех текстовых полей во время события SelectedIndexChanged в виде списка в той же форме. Если одно из текстовых полей содержит данные, отличные от строки DataTable, представленной элементом ListView, я хочу, чтобы он спросил, хочет ли пользователь сохранить только что внесенные изменения. Если ничего не изменилось, я хочу просто изменить выбор.

Очевидно, что я сравниваю содержимое текстовых полей со связанными столбцами в датарове.

Я мог бы просто форсировать чек и делать каждый чек по одному. Я бы предпочел придумать какой-нибудь умный алгоритмический способ циклического перемещения по текстовым полям tabcontrol и проверки значений по столбчатым значениям.

Есть предложения?

РЕДАКТИРОВАТЬ: Мне нравится решение "умно названные текстовые поля" ниже, хотя оба хороши. Если в течение следующих 14 дней ни у кого нет идеи получше, текстовое поле получает зеленый цвет.

Ответы [ 2 ]

0 голосов
/ 03 марта 2009

Если я вас правильно понимаю, вы хотите не сравнивать каждое текстовое поле при каждом изменении, а просто проверять текстовые поля, которые были изменены, управляемые событием SelectedIndexChanged элемента управления ListView. Это верно?

Что ж, в DataRows и DataTables уже реализовано управление версиями строк и откатов, так что если вы привязываете текстовые поля к базовой строке (либо записываете события для обратной записи об изменении / потере фокуса, либо используете автоматический механизм для достижения того же задание), затем проверьте свойство RowState для SelectedIndexChanged. Если RowState отличается от неизменного, предложите пользователю сохранить. Если он сохраняет, передайте изменения, иначе отклоните их.

Так, например, вы хотите что-то подобное в вашем обработчике событий SelectedIndexChanged:

if (row.RowState == DataRowState.Modified) {
  // prompt for user input
  if (promptResult == PromptResult.Save) {
    row.AcceptChanges();
  }
  else {
    row.RejectChanges();
  }
}
0 голосов
/ 03 марта 2009

Дайте текстовым полям умное имя, поскольку в части имени указано имя столбца / строки.

Группировка текстовых полей контролирует цикл через них. Для каждого элемента управления получите (часть) имя и используйте его в качестве ссылки на вашу таблицу данных. Проверьте значения.

...