Установите RowState строки DataTable в удаленное
У меня есть UltraGrid
в моем проекте, и у меня есть функция обновления в форме для обновления данных в базе данных, где данные совпадают.
Данные в сетке хранятся в виде DataTable
, Если строка существующих данных удаляется из UltraGrid
Я хочу иметь возможность установить RowState
из этого ряда в DataTable
в 'RowState.Deleted, so that in the Update function I can check the
RowState`, и если это удаленная строка, то удалите ее, в противном случае обновите данные.
Как я могу сделать это? Пока у меня есть код ниже, но количество возвращаемых строк равно 1 (или текущему количеству строк в сетке), а не 2 (число, которое было до того, как я удалил одну строку).
Как и где в коде я должен установить RowState
удаленной строки, которая будет RowState.Deleted
? Есть ли альтернативный способ сделать это с помощью UltraGrid
?
dsProducts.Tables.Add(commDt.Copy) -- commDt is the DataTable linked to the UltraGrid
tr = con.BeginTransaction(
For Each dr As DataRow In dsProducts.Tables(0).Rows
If dr.RowState = DataRowState.Deleted Then
Try
2 ответа
Решил это.
Объявить
DataTable
на вершине классаНа
BeforeRowsUpdate
метод, вставьте новую строку вDataTable
, которые являются значениями удаляемой строки.При желании, включите окно подтверждения, чтобы убедиться, что они хотят удалить строку. Если они отменяют удаление, удалите строку из
DataTable
,это
DataTable
затем можно использовать для удаления строк вUPDATE
запрос, а сеткаDataSource
может справиться сUPSERTS
Сетка вызовет пометить строку как удаленную (установив RowState), и если вы используете TableAdapter, то вы можете просто вызвать Update на адаптере таблицы, передав DataTable в TableAdapter, и он выполнит обновления в базе данных. Например:
ultraGrid1.UpdateData()
Me.dbRowsTableAdapter.Update(Me.testDataSet)
Если вам нужно вручную обрабатывать обновления и вы хотите получить удаленные строки, вы можете вызвать Select для DataTable, передавая DataViewRowState.Deleted для третьего параметра.