Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как апдейтить данные в гриде? / 4 сообщений из 4, страница 1 из 1
19.09.2003, 18:40
    #32270765
Alvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как апдейтить данные в гриде?
Я делаю так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
    Public Sub SaveDataGrid(ByVal grid As DataGrid, ByVal forecast_period As Date)
        Dim table As DataTable = grid.DataSource
        Dim row As DataRow

        'Dim tableDeleted As DataTable = table.GetChanges(DataRowState.Deleted)
        'If Not tableDeleted Is Nothing Then
        'For Each row In tableDeleted.Rows
        'Me.DeleteExcise(row( "excise_id" )) 
        'Next
        'End If

        Dim tableInserted As DataTable = table.GetChanges(DataRowState.Added)
        If Not tableInserted Is Nothing Then
            For Each row In tableInserted.Rows
                Me.InsertExcise(row( "trade_type_id" ), row( "product_id" ), row( "unit_id" ), _
                row( "currency_id" ), row( "duty" ), forecast_period) 'row( "forecast_period" )
            Next
        End If

        Dim tableUpdated As DataTable = table.GetChanges(DataRowState.Modified)
        If Not tableUpdated Is Nothing Then
            For Each row In tableUpdated.Rows
                Me.UpdateExcise(row( "excise_id" ), row( "unit_id" ), row( "currency_id" ), _
                row( "duty" ))
            Next
        End If
        table.AcceptChanges()
    End Sub


Все работает, за исключением закомментированного кода, а именно удаление строк. Когда в цикле пробегаю, то вылетает ошибка что нельзя обратиться к элементам удаленных строк

Но как же тогда это делает DataAdapter.Update метод?

Решил эту проблему с помощью обработчика события DataTable RowDeleting

Код: plaintext
1.
2.
3.
    Private Sub Row_Deleting(ByVal sender As Object, ByVal e As DataRowChangeEventArgs)
        Me.DeleteExcise(e.Row( "excise_id" ))
    End Sub


Но это не совсем подходит, так как в первом случае код апдейтится по нажатию на кнопку, а во втором без оного и без возможности отмены...

Подскажите что не так?
...
Рейтинг: 0 / 0
28.09.2003, 17:55
    #32277654
Sergey Pikhulya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как апдейтить данные в гриде?
При запросе значения столбца используйте DataRowVersion.
...
Рейтинг: 0 / 0
29.09.2003, 09:47
    #32277815
Са_ша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как апдейтить данные в гриде?
Грабли стандартные, сам на них наступал. Кароче если обрабатываешь строки, надо вставить проверку состояния, типа такой:

Код: plaintext
1.
2.
if dr.RowState <> DataRowState.Deleted then
'блок твоих операций
end if
...
Рейтинг: 0 / 0
01.10.2003, 13:47
    #32280709
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как апдейтить данные в гриде?
адаптер поступает примерно так
Код: plaintext
1.
2.
3.
4.
5.
Dim tableDeleted As DataTable = table.GetChanges(DataRowState.Deleted)
If Not tableDeleted Is Nothing Then
  For Each row In tableDeleted.Rows
    Me.DeleteExcise(row( "excise_id" , DataRowVersion.Original)) 
  Next
End If
и ведь работает без всяких исключений
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как апдейтить данные в гриде? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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