Как установить ячейку в наборе данных?ПОМОГИТЕ! - PullRequest
1 голос
/ 22 июня 2010

Я пытаюсь установить ячейку типа "System.Int32" в наборе данных по коду, и моя попытка выглядит следующим образом:

int aCarID = 5; // as an example...

// points out the row that I want to manipulate - I guess this is what doesn´t work???
int insertIndex = myDataSet.tableCars.Rows.Count 

myDataSet.tableCars.Rows[insertIndex]["CarID"] = aCarID;

Что происходит: я получаю исключение «System.IndexOutOfRangeException».

Вы можете говорить, что я глуп, если вы дадите ответ ...

UPDATE!

Да, я пытаюсь создать новую строку, это правда, поэтому я не использую «-1».

Так, каков синтаксис для создания новой строки?

Если я использую tableCars.Rows.Add (...), мне нужно предоставить «DataRow Row» для функции Add, а у меня ее нет - пока! (Улов 22)

НОВОЕ ОБНОВЛЕНИЕ! Упс, нашел его - "NewRow ()": -)

Ответы [ 5 ]

2 голосов
/ 22 июня 2010

Вы понимаете, что индексы начинаются с нуля в C #?Это означает, что если в вашей таблице 3 строки, вы пытаетесь получить доступ к 4-й строке, потому что insertIndex = 3. Попробуйте insertIndex - 1.

Редактировать: поскольку вы пытаетесь добавить новую строку и уже обнаружиликак это сделать, также не забудьте сохранить эти изменения в базе данных (я полагаю, это то, что вы хотите сделать).Самый простой способ - установить свойство UpdateCommand объекта DataAdapter, который вы использовали для заполнения DataSet (или фактически DataTable в DataSet).Вы также можете генерировать команды обновления, используя подкласс DbCommandBuilder.

1 голос
/ 22 июня 2010

С MSDN :

Исключение IndexOutOfRangeException вызывается при попытке доступа к элементу массива или коллекции с индексом, который находится за пределами границмассив или меньше нуля.

, поэтому проблема в том, что вы используете неправильный индекс, как сказал Кристиан.

1 голос
/ 22 июня 2010

Это классическое смещение: допустимые строки имеют индексы 0 ... Rows.Count -1

Если вы хотите создать новую строку, сначала наберите tableCars.AddNew().

0 голосов
/ 22 июня 2010

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

Следующий код будет работать для вас (и намного проще!)

var insertRow = myDataSet.tableCars.NewtableCarsRow();
insertRow.CarID = aCarID;
myDataSet.AcceptChanges();

Вот и все!

ПРИМЕЧАНИЕ: этот код работает с .NET версии 3.5 и выше.Для предыдущих версий замените ключевое слово var на tableCarsRow (я предполагаю, что вы не настраивали имя по умолчанию для datarow в конструкторе DataSet).

0 голосов
/ 22 июня 2010

попробуйте сначала создать новую строку, потому что вы хотите получить доступ к строке, которая не существует, или вы должны вставить свою информацию в индексированную строку (insertIndex - 1).Datarow индексирует первую позицию 0, как в массивах.

...