Посмотрите на свой код:
Dim dsRow As System.Data.DataRow = dsTemp.Tables(0).Rows(index)
'...
If Not Microsoft.VisualBasic.IsDBNull(value) AndAlso String.Compare(value.ToString, "ColDes", True) = 0 Then
Dim newRow As System.Data.DataRow = dsTemp.Tables(0).NewRow
dsTemp.Tables(0).Rows.Remove(dsRow)
dsTemp.Tables(0).Rows.InsertAt(dsRow, 1)
dsTemp.Tables(0).NewRow()
dsTemp.Tables(0).Rows.InsertAt(dsRow, 3)
End If
Что делает этот код? Посмотрите на каждую строку и спросите себя, что она делает.
- Сначала вы получаете существующую строку из таблицы и назначаете ее переменной
dsRow
. - Внутри
If
block, вы создаете новую строку и назначаете ей переменную newRow
. Вы больше никогда не используете эту переменную, так в чем был смысл этого? - Затем вы удаляете существующую строку из таблицы.
- Затем вы вставляете существующую строку как вторую строку в таблице .
- Затем вы создаете новую строку и вообще ничего с ней не делаете, так какой в этом был смысл?
- Затем вы пытаетесь вставить существующую строку во второй раз, как четвертый в таблице.
Неужели неожиданно, что сообщение об ошибке сообщает вам, что эта строка уже принадлежит таблице?
Во-первых, когда вы вызываете NewRow
, который просто создает новую строку. Эта строка НЕ добавляется в таблицу автоматически. Как это могло произойти? Он пуст, и в таблице могут быть столбцы, не допускающие значения NULL. Вы должны заполнить его по мере необходимости, а затем добавить его самостоятельно.
Кроме того, вы не можете добавить или вставить одну и ту же строку дважды.
Если все, что вы пытаетесь сделать вставляет пустые строки, тогда вам нужно фактически вставить пустые строки, а не существующие строки, которые вы удалили. Вам нужно дважды позвонить по номеру NewRow
, а затем Insert
, например,
myTable.Rows.Insert(myTable.NewRow(), 1)
myTable.Rows.Insert(myTable.NewRow(), 3)