2016-05-19 5 views
0

У меня есть эти строки кодовDataTable RowState всегда Добавлено состоянии

DataTable DTable = new DataTable(); 
DTable.Columns.Add("Domain"); 
DTable.Rows.Add("Sample"); 
DTable.AcceptChanges(); 
DGridView.DataSource = DomainTable; 

И эту кнопку для сохранения изменений

private void SaveDChangesButton_Click(object sender, EventArgs e) 
     { 
      foreach(DataRow dr in Dtable.Rows) 
      { 
       if(dr.RowState == DataRowState.Modified) 
       { 

       } 
      } 
     } 

Моя проблема заключается в том, что даже если я изменил первый ряд, Rowstate всегда возвращать Добавлено.

+0

@TanmayNehete Хорошая статья, но не отвечает на мой вопрос – Believer

+0

Как вы изменили (отредактировали) DataGridView? И можете ли вы показать больше кода выше одного? В принципе, редактирование значений в DataGridView не делает изменения одинаковыми с DataTable внутри DataGridView. –

+0

Я изменяю его при запуске в VS во время выполнения – Believer

ответ

0

RowState - это перечисление флагов и более одного значения может быть включен.

Всегда используйте функцию HasFlag для проверки на значение! Так это изменить:

if(dr.RowState == DataRowState.Modified) 
    { 
     // do the saving stuff 
    } 

для этого:

if(dr.RowState.HasFlag(DataRowState.Modified)) 
    { 
     // do the saving stuff 
    } 

Обратите внимание, что как для Added и Modified быть на AcceptChanges не должно было назвать ..:

добавлены: строка добавлена ​​в DataRowCollection, а AcceptChanges не был вызван

Изменено: строка была изменена, а AcceptChanges не была вызвана .

Если добавить строку и позволяет пользователю изменять его (или сделать это в коде), то оба флаги должны быть на и исходное состояние в вашем коде ложь несмотря на тот факт имеет фактически был изменен!

Но если вы у называется AcceptChanges для строк или всей таблицы, как ваш код не предполагает то ни флаг на!

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