2011-02-09 2 views
0

Я пытаюсь выяснить, где DataRowCollection.Add (строка DataRow) вставляет новую строку в ее данные. Это в конце таблицы, как append? Это случайно?Где метод DataRowCollection.Add вставляет новую строку?

Кроме того, я хочу использовать это, пока я зацифровываю данные. Если существует какое-то условие, добавьте новую строку, содержащую разные данные, чтобы пройти через цикл For до конца datatable. Существуют ли какие-либо конкретные проблемы с этим подходом? Как еще я могу справиться с этим?

EDIT: Я для Looping через .Net DataTABLE, хранящийся в памяти. Я не касаюсь базы данных, где исходные данные хранятся во время этой операции циклирования. DataTABLE заполняется до цикла и не является проблемой.

Вот relavant код:

DataTable machineANDlastDate = new DataTable(); 
//Populate machineANDlastDate 

for (int i = 0; i < machineANDlastDate.Rows.Count; i++) 
{ 
    lastFutureDate = DateTime.Parse(machineANDlastDate.Rows[i]["MaxDueDate"].ToString()); 
    newDateTime = lastFutureDate.AddDays(frequency); //This is where the new date is created. 
    machineSerial = machineANDlastDate.Rows[i]["machineSerial"].ToString(); 

    if (newDateTime < DateTime.Now) 
    { 
      machineANDlastDate.Rows.Add(new String[] { machineSerial,   newDateTime.AddDays(frequency).ToString() }); 

      continue; 
    } 
    ...Removed for irrelevancy... 
} 

Является ли это правильным способом, чтобы добавить строку в конец DataTable?

+1

если это не хэш, добавление идет в конец – Alex

+0

Разве что хэш? – MAW74656

+0

Я думаю, что хеши более распространены там, где у вас есть ключ/ценности. Ключ хэширован, поэтому быстрый поиск по индексу. – jlafay

ответ

2

Насколько я знаю, он всегда добавляется в конец коллекции.

Если у вас for цикл через базу данных, не должно быть проблем, если вы начнете в начале таблицы данных и закончите в конце ее или smth похожее. Тем не менее, вы также будете прокручивать вновь созданные строки данных, и я не знаю, хотите ли вы этого достичь. У вас могут возникнуть проблемы, если вы возьмете цикл foreach, потому что он не может обрабатывать модификации базовой коллекции.

+0

Да, я хочу, чтобы петли через новые предметы, вот и точка. Если существует определенное условие, я изменяю эти данные, тогда я хочу запустить модифицированную версию через цикл. Я знаю проблему цикла foreach с базовым соединением, поэтому ваше высказывание в цикле For не имеет этой проблемы? – MAW74656

+0

Если вы не удалите какие-либо предметы, я не могу представить никаких проблем, если условие все еще действует заранее. Важное различие между двумя циклами 'for' и' foreach' лежит в индексировании цикла 'for'. Поскольку вы работаете с индексами, вы избегаете проблемы, с которой вы столкнулись бы с циклом foreach. Надеюсь, это поможет. –

+0

Как использовать метод Rows.Count DataTable как ограничение? Будет ли это обновление с каждой итерацией цикла? – MAW74656

0

Это всегда в конце таблицы, насколько я знаю большинство коннекторов DataBase, потому что вы используете их строку добавления, всегда в конце.

+0

Я не работаю с соединителями базы данных здесь. – MAW74656

-3

Метод Add введет DataRow в объект DataRowCollection. Чтобы фактически добавить DataRow в таблицу данных, вам нужно будет вызвать метод NewRow, который добавляет себя к DataTable и таким образом добавляет строку в таблицу в этой базе данных. Для справки, выезд http://msdn.microsoft.com/en-us/library/9yfsd47w.aspx

+0

Нет, это совсем наоборот. Сначала вам нужно создать новую строку с помощью метода «NewRow», а затем вам нужно добавить ее в таблицу данных с помощью метода «Добавить». DataTable является своего рода представленным DataRowCollection. –

+0

DataTable содержит DataRowCollection (DataTable HAS DataRowCollection). Нет связанных или связанных, DataTable является составной частью многих других объектов, включая DataRowCollection. – MAW74656

+0

Метод NewRow вернет вам экземпляр строки, который имеет ту же структуру столбцов, что и таблица. Это позволяет вам ссылаться на ячейки по столбцу с помощью индексатора. Вам все равно необходимо добавить строку в таблицу, когда она заполнена данными. –

1

Если вы хотите узнать, есть ли новая новость или нет, вы можете проверить свойство DataRow.RowState.

// your code to add rows 
... 

// process added rows 
foreach (DataRow row in machineANDlastDate.Rows) 
{ 
    if (row.RowState == DataRowState.Added) 
    { 
     // do stuff 
    } 
} 

// now confirm new rows (they won't have a RowState of Added after this) 
machineANDlastDate.AcceptChanges(); 
+0

Я не знаком с этим методом AcceptChanges(), но меня не интересует, где/когда строка исходит, я просто хочу обработать ее, когда цикл достигнет этого. – MAW74656

+0

AcceptChanges изменяет RowState на все строки на Unmodified. Когда вы добавляете строки, они начинаются с RowState of Added - вы можете использовать это для обработки только новых строк. Вам нужно только вызвать AcceptChanges, когда вы закончите, если вам придется перерабатывать и не хотите обрабатывать одни и те же строки. –

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