2016-03-10 5 views
0

У меня есть код для сравнения двух таблиц данных. Если у одной таблицы больше строк, чем у другой, я хочу иметь возможность добавлять пустые строки до тех пор, пока они не будут иметь равное количество строк.Для цикла для добавления пустых строк в datatable не работает

Я попытался это:

for (int i = 0; i < difference; i++) 
{ 
    table.Rows.Add(); 
} 

, а также

DataRow newRow = table.NewRow(); 
table.ImportRow(newRow); 

и

DataRow newRow = table.NewRow(); 
table.Rows.Add(newRow); 

Ни один из них не похоже на работу.

table.Rows.Add() (с и без пар), кажется, сломать меня из петли после того, как одна итерации

ImportRow петли вокруг соответствующего количества времени, но только добавляет один новый ряд

Куда я иду не так?

+0

Какова схема и расположение таблицы, к которой вы добавляете? – BryanT

+2

Какая разница? –

+0

Создаете ли вы новый объект DataRow с каждой итерацией цикла - относительно вашей второй попытки? –

ответ

1

Следующий код работает нормально для меня:

DataTable dtable = new DataTable(); 
dtable.Columns.Add("Column1"); 
dtable.Columns.Add("Column2"); 

for (int i = 0; i < 10; i++) 
{ 
     DataRow newRow = dtable.NewRow(); 
     dtable.Rows.Add(newRow); 
} 

Он, как и ожидалось, добавляет 10 пустых строк в моей DataTable. Если это не сработает, возможно, ваш DataTable имеет первичный ключ или другое ограничение, которое предотвращает добавление этих пустых строк. Покажите нам свое определение DataTable.

Редактировать

В этом примере на основе предыдущего я определить первичный ключ, так что этот код не работает:

DataTable dtable = new DataTable(); 
dtable.Columns.Add("Key"); 
dtable.Columns.Add("Column2"); 
dtable.PrimaryKey = new DataColumn[]{dtable.Columns[0]}; 

for (int i = 0; i < 10; i++) 
{ 
    DataRow newRow = dtable.NewRow(); 
    dtable.Rows.Add(newRow); 
} 

Это терпит неудачу с NoNullAllowedException, это, первичный Ключ не может быть нулевым.

Следующий код работает:

for (int i = 0; i < 10; i++) 
{ 
    DataRow newRow = dtable.NewRow(); 
    newRow["Key"] = i; 
    dtable.Rows.Add(newRow); 

} 

Потому что я устанавливаю значение первичного ключа. В вашем случае это зависит от типа DataType вашего PrimaryKey, и вы также должны проверить, действительно ли значения, которые вы «изобретаете», уже присутствуют, или они также потерпят неудачу.

Надеюсь, теперь это ясно для вас.

+0

Я пробовал этот код, поэтому я думаю, что вы должны быть правы в отношении первичного ключа.Будет ли это означать, что я установлю основной ключ этих новых строк, прежде чем добавлять их? – Sophia

+0

Да @Sophia, если у datatable есть какой-либо первичный ключ, вы должны установить этот столбец в новые строки, потому что первичные ключи должны быть уникальными, и если все строки пустые, у них будет один и тот же первичный ключ. – Pikoh

+0

Хорошо, я не уверен, как это сделать .. Дополнительная информация была бы очень благодарна :) – Sophia

0

С помощью этого теста:

 var table = new DataTable(); 
     for (int i = 0; i < 5; i++) 
     { 
      var row = table.NewRow(); 
      table.Rows.Add(row); 
     } 

Объект DataTable таблица содержит 5 строк.