Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Обработка модифицированных записей вручную


Автор: Papirus 2.7.2007, 08:40
Вынужден повторить свой вопрос, поскольку, имхо, модераторы не обосновано перенесли его на форум "Базы данных под .NET". С сохранением в БД все как раз благополучно. Вопрос как избежать дублирования добавленных записей в таблирце на клиенте?


Собственно говоря, проблема со вставкой данных (Insert). Есть необходимость самому прописать обновление данных, т.к. то, что отображается в гриде - результат объединения нескольких таблиц + некоторые проверки непосредственно в селекте... и т.д. Короче, я посчитал, что проще по примеру VS2003, а возможно и VS2005 в пакет инструкций добавлять Select (SelectCommand.CommandText), в котором ID = identity. Сохранение производится стандартно: 
Код

       Dim tblChange As New DataTable = tbl.GetChanges
        For Each rw As DataRow In tblChange
            Select Case rw.RowState
                Case DataRowState.Added
                Case DataRowState.Deleted
                Case DataRowState.Modified

            End Select
        Next

Однако, пока не удается полученную из БД строку подставить вместо обрабатываемой. 
Пробовал так (CmdIns - сохраненный объект SqlCommand для вставки данных, cnn - SqlConnection, tbl - обновляемая таблица)
Код

        Dim tblChange As New DataTable = tbl.GetChanges
        For Each rw As DataRow In tblChange
            Select Case rw.RowState
                Case DataRowState.Added
                       cnn.Open()
                       Dim rd As SqlDataReader = CmdIns.ExecuteReader
                       Dim tb As New DataTable 
                       tb.Load(rd)
                       rd.Close()
                       cnn.Close()
                       rw.ItemsArray = tb.Rows(0).ItemsArray ' это 1-й способ и он работает, если поле ID не Primary Key. В противном случае - сообщение об ошибке ID is ReadOnly
         
                      tbl.Merge(tb) ' это 2-й способ
                      rw.Delete()  ' вот как быть здесь не знаю(?????????) пока. Без Dalete в гриде видим удвоенное количество этих строк. А с Delete  опять ошибка, но уже в связи с изменением количества элементов в коллекции... :dash1 
                      rw = tb.Rows(0)
                Case DataRowState.Deleted
                Case DataRowState.Modified

            End Select
        Next


А значение ID обязательно надо иметь для последущей работе клиента с данными... 

Может после заполнения таблицы удалять Primary Key?

Автор: stab 2.7.2007, 10:52
Модератор: вынужден закрыть вашу тему. покажите мне хоть одну строчку в вашем коде\посте, которая имеет отношение к WinForms.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)