|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Вечер добрый. Помогите разобраться. Вот простенький код создания DataSet, заполнения одной из его таблиц и затем удаления какой-то там строки Row: Dim ds As New DataSet() Dim tm As New DataTable("Tm") Dim da As New SqlDataAdapter() ds.Tables.Add(tm) da.SelectCommand = New Data.SqlClient.SqlCommand("SELECT * FROM Materials", connDB) da.Fill(ds.Tables("tm")) ds.Tables("tm").Rows.Remove(Row) Вопрос: почему после выполнения последней строчки кода (т.е. после удаления строки из таблицы "tm") ds.HasChanges() = False ?? хотя вроде должно быть ds.HasChanges() = True ... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 20:08 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
swkxВопрос: почему после выполнения последней строчки кода (т.е. после удаления строки из таблицы "tm") ds.HasChanges() = False ?? хотя вроде должно быть ds.HasChanges() = True ... внимательно читаем мсдн, особенно ремарки ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 20:22 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
swkx, После удаления AccеptChange не сделали ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 20:34 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
А что там читать ? "Получает значение, определяющее наличие изменений в классе DataSet, включая добавление, удаление или изменение строк." Тем более что добавление строк или их изменение в этой несчастной табличке ds.Tables("tm") выдает ds.HasChanges() = True ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 20:36 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
pation, я правильно понял, что конструкцию ds.Tables("tm").Rows.Remove(Row) нужно заменить на следующую ?: Dim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row) ds.Tables("tm").Rows(RowIndex).Delete() Вроде как результат тот что нужен, но хочу убедиться, что это правильный подход ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:03 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Cat2, ds.AcceptChanges() не помогает, да вроде как и не должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:12 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Cat2swkx, После удаления AccеptChange не сделали Cat2 перетрудился что-ли? swkx именно Delete надо делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:18 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Извините, сглупил. Не о том думал ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:20 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:20 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Вообще-то я сомневаюсь. Предо ставленый код не полон. Откуда там взялся Row в ds.Tables("tm").Rows.Remove(Row) ? Если Row пустое, то изменений не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:34 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Код не полный. Я поэтому специально и написал "удаления какой-то там строки Row" Она точно не пустая, просто метод её определения к сути вопроса отношения не имеет. Чтобы уж совсем всё было красиво, отмечу, что connDB - тоже вполне корректное соединение)) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 21:50 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
Я согласен с swkx, что надо использвать делете. Так как Remove изменяет длину коллекции, но не помечает , что она изменена в события связанных с изменением записей ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2012, 22:28 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
swkxА что там читать ? "Получает значение, определяющее наличие изменений в классе DataSet, включая добавление, удаление или изменение строк." Тем более что добавление строк или их изменение в этой несчастной табличке ds.Tables("tm") выдает ds.HasChanges() = True swkxpation, я правильно понял, что конструкцию ds.Tables("tm").Rows.Remove(Row) нужно заменить на следующую ?: Dim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row) ds.Tables("tm").Rows(RowIndex).Delete() Вроде как результат тот что нужен, но хочу убедиться, что это правильный подход млять ткнуть вас носом сюда Remarks When a row is removed, all data in that row is lost. You can also call the Delete method of the DataRow class to just mark a row for removal. Calling Remove is the same as calling Delete and then calling AcceptChanges . You can also use the Clear method to remove all members of the collection at one time. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 11:47 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
swkxDim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row) ds.Tables("tm").Rows(RowIndex).Delete() ищё одна жесть =)) Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2012, 11:49 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
swkx, Метод ds.HasChanges() определяет наличие изменений по состояниям строк добавленных в таблицы и эти таблицы должны бить добавлены в ds.Tables. ds.Tables("tm").Rows.Remove(Row) удаляет стоку из таблицы, т.е. в дальнейшем строка Row не влияет на состояние таблицы и датасета. После вызова метода Rows.Remove(Row) Row.RowState == DataRowState.Detached , т.е. связь Row c ds полностью удаляется и ds больше не может что-либо сказать о Row, даже был ли он вообще. Чтобы удалить строку из таблицы нужно вызвать Row. Delete() , тогда Row.RowState получит статус Deleted. А чтобы окончательно удалить Row из таблицы нужно вызвать ds.AcceptChanges() или ds.Tables("tm").ds.AcceptChanges(). Вообще метод DataSet.AcceptChanges и DataTable.AcceptChanges позволяют создавать транзакции. Т.е. вызвав AcceptChanges вы фиксируете данные, затем, изменяет их, а, затем, при помощи AcceptChanges опять фиксируется данные или при помощи DataSet.RejectChanges ( DataTable.RejectChanges ) откатывает их в исходное состояние. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 11:24 |
|
Не срабатывет признак изменения DataSet
|
|||
---|---|---|---|
#18+
pationswkxDim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row) ds.Tables("tm").Rows(RowIndex).Delete() ищё одна жесть =)) Код: c# 1.
Ступил(( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:33 |
|
|
start [/forum/search_topic.php?author=Dmitri4&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 493ms |
total: | 652ms |
0 / 0 |