Алгоритмическая проверка двух десятков значений, текстовых полей и столбцов данных

StackOverflow https://stackoverflow.com/questions/606378

Вопрос

Итак, большие мозги, вот кое-что, что является скорее вызовом, чем требованием.Я немного озадачен.Обычно мне просто нужен толчок в нужном направлении, так что приготовьте свои палочки.

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

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

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

Есть какие-нибудь предложения?

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

Это было полезно?

Решение

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

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

Другие советы

Если я правильно вас понимаю, вы хотите избежать сравнения каждого текстового поля при каждом изменении, в пользу простой проверки текстовых полей, которые были изменены, управляемых событием 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();
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top