2015-07-20 7 views
0

Я не новичок в WinForms, но я всегда «сворачивал сам», когда дело доходило до проверки - и я думаю, что пришло время воспользоваться встроенным материалом. Я Googled вокруг для некоторых основ, но я не нахожу, что мне нужно ...Автоматическая проверка в DataGridView

У меня есть DataGridView. У меня есть (пользовательский) объект, который имеет четыре свойства String. Я получаю список <> из них из файла XML.

Так что, когда я делаю это:

dgv.DataSource = genericListOfStationObjects; 

строки сделать правильно отображаться в DataGridView. Таким образом, привязка данных работает очень хорошо - по крайней мере, в «входящем» направлении.

Это хорошо.
Но что мне нужно сделать, это:

  1. трек IsDirty на каждой строке (? Без ручного добавления флага)
  2. визуальной индикации (в DataGridView), если какой-либо из значений в ячейках DataGridView являются недействительными. (У меня есть методы проверки на моем пользовательском объекте (из которых состоит Список <>). Я не могу заставить эти «глифы ошибки» появляться. Я пробовал все сообщения SO, которые я смог найти на этом ...

большое спасибо,
Элиэзера

ответ

0

чтобы ответить на первый вопрос, есть два родных свойства, которые вы хотите использовать:

  1. IsCurrentCellDirty
  2. IsCurrentRowDirty

Они работают только для текущей выбранной ячейки/строки. Поэтому вам, возможно, придется прибегнуть к созданию собственного, если вам нужно отслеживать «IsDirty» в каждой строке. Но есть событие, которое поставляется с родными грязными настройками, CurrentCellDirtyStateChanged вы можете использовать для регистрации всех изменений. Вы также можете использовать CellValueChanged для регистрации любых изменений, которые могут вам понадобиться. Я лично использую свойство на уровне формы, чтобы отслеживать, если у меня есть какие-либо изменения/изменения данных с помощью любого из этих событий, и если я это сделаю, я сохраняю изменения перед закрытием формы.

Проверка данных довольно проста в WinForms DataGridView. Чтобы получить красные глифы ошибки, чтобы просто установить ErrorText ячейки или строки. Я также использую собственное событие RowValidating DataGridView.

void dg_RowValidating(object sender, DataGridViewCellCancelEventArgs e) 
{ 
    DataGridViewRow dgRow = dg.Rows[e.RowIndex]; 

    if ((dgRow.Cells["yourColumnName"].Value == null) || 
     (dgRow.Cells["yourColumnName"].Value.ToString().Length == 0)) 
    { 
     // Set both the row and cell error text at the same time. 
     dgRow.ErrorText = dgRow.Cells["dgTxtColTest List"].ErrorText = 
      "You must enter a value in the " + yourColumnName + " column." 

     e.Cancel = true; 
    } 
} 

Когда строка проверяется вы должны очистить любые сообщения об ошибках, которые, возможно, создали выше:

void dg_RowValidated(object sender, DataGridViewCellEventArgs e) 
{ 
    // Clear errors from row header and cells in the row 
    DataGridViewRow row = dg.Rows[e.RowIndex]; 
    row.ErrorText = ""; // Clear the row header error text 

    // Clear all error texts from the row 
    foreach (DataGridViewCell cell in row.Cells) 
    { 
     cell.ErrorText = ""; // Clear each cell in the row as now row is valid 
    } 
} 
Смежные вопросы