При привязке DataSet к элементу управления Datagrid
и использовании объекта DataAdapter для изменения базы данных,
например:
dim adp как новый OleDbDataAdapter (stradp, conn)
dim ocb как новый OleDbCommandBuilder (adp)
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds,"Заказы")
-----------------------------------------
При выполнении операции удаления, если мы добавим такой метод:
sub mydatagrid_delete (отправитель как объект, e как datagridcommandeventargs)
dim dt как новый DataTable()
dt = ds.Tables("Заказы")
тусклый доктор как DataRow
dr = dt.Rows(E.Item.ItemIndex)
доктор.удалить
'dr.AcceptChanges 'Однажды я попытался использовать полное удаление и обнаружил, что когда adp автоматически обновляется обратно в базу данных, соответствующий оператор sql не может быть автоматически сгенерирован
', чтобы решить исключение индекса страницы, которое возникло при удалении последнего элемента текущего страница
'********************************************** ***************
dim LastEditPage как целое число = mydatagrid.currentPageIndex
Если (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 и mydatagrid.Items.Count = 1 Тогда
Если mydatagrid.pageCount > 1 Тогда
последняя страница редактирования = последняя страница редактирования - 1
Еще
последняяредитпаже = 0
Конец, если
Конец, если
mydatagrid.currentPageIndex = последняя страницаEditPage
'********************************************** **************
сеанс («Список заказов») = ds
mydatagrid.edititemindex = -1
mydatagrid.datasource = ds.tables("Заказы")
mydatagrid.databind()
end sub
Возникло исключение при удалении первого по одному. Было обнаружено, что при удалении второго его невозможно удалить, то есть исходный dr(2) не стал автоматически dr(1). Если мы используем dr.delete dr.acceptChanges, изменения могут быть внесены автоматически, но, как объяснялось выше, автоматические обновления нельзя использовать для возврата в базу данных. Мы должны получить фактический индекс при удалении, поэтому мы использовали этот метод для создания другой таблицы в текущем ds для поддержания синхронного удаления, но сохраняем фактическое значение индекса в столбце id таблицы. Конкретный код выглядит следующим образом:
Способ. чтобы решить индекс dr:
dim orderTable as new DataTable() 'Создать временную таблицу для сохранения индекса и поддержки синхронизированного удаления
затемните theNewRow как DataRow
тусклый постоянный ток как DataColumn
orderTable.TableName = "orderId"
ds.Tables.add(orderTable)
dc = новый столбец данных()
dc.ColumnName = "id"
orderTable.columns.add(DC)
dim dcKey() как DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
дим я как целое число
Для i = 0 до (ds.Tables("Users").Rows.Count - 1)
theNewRow = orderTable.NewRow()
theNewRow("id") = i.toString()
orderTable.Rows.add(theNewRow)
Следующий
код, добавленный в приведенную выше функцию удаления, замените dr = dt.Rows(e.Item.ItemIndex):
dim drOrder as DataRow.
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder как целое число = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(currentOrder)
drOrder.delete
Если есть функция обновления, замените dr = dt.Rows(e.Item.ItemIndex):
dim drOrder как DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder как целое число = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(currentOrder)