powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не срабатывет признак изменения DataSet
17 сообщений из 17, страница 1 из 1
Не срабатывет признак изменения DataSet
    #38029271
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вечер добрый. Помогите разобраться.
Вот простенький код создания 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 ...
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029283
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swkxВопрос: почему после выполнения последней строчки кода (т.е. после удаления строки из таблицы "tm")

ds.HasChanges() = False ??

хотя вроде должно быть ds.HasChanges() = True ...

внимательно читаем мсдн, особенно ремарки
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029295
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
swkx,

После удаления AccеptChange не сделали
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029299
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что там читать ?

"Получает значение, определяющее наличие изменений в классе DataSet, включая добавление, удаление или изменение строк."

Тем более что добавление строк или их изменение в этой несчастной табличке ds.Tables("tm") выдает
ds.HasChanges() = True
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029321
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

я правильно понял, что конструкцию

ds.Tables("tm").Rows.Remove(Row)

нужно заменить на следующую ?:

Dim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row)
ds.Tables("tm").Rows(RowIndex).Delete()

Вроде как результат тот что нужен, но хочу убедиться, что это правильный подход
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029336
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2,

ds.AcceptChanges() не помогает, да вроде как и не должно.
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029342
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2swkx,

После удаления AccеptChange не сделали Cat2 перетрудился что-ли?
swkx именно Delete надо делать.
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029346
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Извините, сглупил. Не о том думал
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029347
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029369
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вообще-то я сомневаюсь.
Предо ставленый код не полон.

Откуда там взялся Row в
ds.Tables("tm").Rows.Remove(Row)
?

Если Row пустое, то изменений не будет
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029398
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код не полный. Я поэтому специально и написал "удаления какой-то там строки Row"
Она точно не пустая, просто метод её определения к сути вопроса отношения не имеет.

Чтобы уж совсем всё было красиво, отмечу, что connDB - тоже вполне корректное соединение))
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029420
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я согласен с swkx, что надо использвать делете. Так как Remove изменяет длину коллекции, но не помечает , что она изменена в события связанных с изменением записей
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029892
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38029902
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swkxDim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row)
ds.Tables("tm").Rows(RowIndex).Delete()

ищё одна жесть =))
Код: c#
1.
Row.Delete();//а так что не прокатило?
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38031404
x837
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 ) откатывает их в исходное состояние.
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38036584
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pationswkxDim RowIndex As Integer = ds.Tables("tm").Rows.IndexOf(Row)
ds.Tables("tm").Rows(RowIndex).Delete()

ищё одна жесть =))
Код: c#
1.
Row.Delete();//а так что не прокатило?



Ступил((
...
Рейтинг: 0 / 0
Не срабатывет признак изменения DataSet
    #38036586
swkx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x837,

спасибо, разобрался.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не срабатывет признак изменения DataSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]