проблемы при работе с данными
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



проблемы при работе с данными Expand / Collapse
Автор
Сообщение
24.01.2007 9:37
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 22.02.2007 12:21
Сообщ.: 3, Visits: 20
подскажите,плиз,как быть в следующей ситуации - на форме есть список c кодом завода ,в зависимости от выбранной записи - соответствующие записи выводяться в DataGrid.

проблема в следующем - не могу организовать удаление,редактирование и ввод новых,

когда выводила всю таблицу организовывала удаление например так tbl.Rows(DataGrid1.CurrentRowIndex).Delete() передавала индекс выделенной записи,но ведь теперь это не реальная позиция записи в таблице,а только в DataGrid1.заранее спасибо 
           

 Dim sMsg As String
        Dim nButton As Integer 'переменная для нажатой кнопки

        Dim nResult As Integer

        sMsg = "Видалити запис із словника?"

        nButton = vbYesNo + vbQuestion
        nResult = MsgBox(sMsg, nButton, "Видалення запису")

        If nResult = vbYes Then
            tbl.Rows(DataGrid1.CurrentRowIndex).Delete()
            DataGrid1.DataSource = tbl
            custCB = New OleDbCommandBuilder(dscmd)
            dscmd.Update(ds, "kod_pomol")
            tbl.AcceptChanges()
            DataGrid1.Refresh()
        End If
    End Sub

Сообщ. #910005
24.01.2007 16:48
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 27.02.2008 16:42
Сообщ.: 43, Visits: 1 569
MeduzKa (24.01.2007)
когда выводила всю таблицу организовывала удаление например так tbl.Rows(DataGrid1.CurrentRowIndex).Delete() передавала индекс выделенной записи,но ведь теперь это не реальная позиция записи в таблице,а только в DataGrid1.

Не сoвсем. Удaление в дaннoм случaе прoисхoдит в структуре DataTable, кoтoрaя является истoчникoм дaнных для DataGrid.  Линия DataGrid1.Refresh() в кoде oтрaжaет этo изменение. Крoме тoгo, я бы предлoжил не пoлaгaться пoлнoстью нa пoзицию в DataGrid при этoй oперaции. Бoлее прaвильным будет пoлучить из DataGrid знaчеие ключевoгo пoля в DataTable для выделеннoй зaписи и прoизвoдить удaление нa oснoвaнии знaчения ключевoгo пoля.

Кстaти, нaличие ключевoгo пoля (Primary Key) является неoбхoдимым услoвием для успешнoгo сoздaния клaссoм OleDbCommandBuilder кoмaнды нa изменение дaнных.
Вoзмoжнo чтo у Вaс есть и другие прoблемы в кoде. Нaпример, из приведеннoгo кoдa не виднo чтo тaкoе dscmd (этo дoлжен бытъ DataAdapter, кoтoрый был сoздaн при зaпoлнении DataTable); кaкaя SelectCommand испoльзoвaлaсь при сoзaдaнии DataAdapter, не включaлa-ли этa кoмaндa пoля из нескoльких тaблиц; Не был-ли зaкрыт DataAdapter дo испoлнения кoдa custCB = New OleDbCommandBuilder(dscmd); не был-ли изменен текст SelectCommand пoсле сoздaния DataAdapter; и тaк дaлее.
Сaмaя-же oснoвнaя прoблемa в приведеннoм кoде - oтсутствие error handling. Нaчните с этoгo.

Сообщ. #910025
22.02.2007 0:03
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 06.01.2008 10:33
Сообщ.: 70, Visits: 678
Для определения "правильной" строки (иногда пользователь может выполнить сортировку например и индексы перемешиваются) нужно воспользоваться BindingContext.
Сообщ. #910994
22.02.2007 12:22
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 22.02.2007 12:21
Сообщ.: 3, Visits: 20
а нельзя ли маленький пример?сама никак не могу разобраться..
Сообщ. #911011
22.02.2007 20:22
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 06.01.2008 10:33
Сообщ.: 70, Visits: 678
Что-то типа этого:
 
Private Sub Init()
        'Инициализация формы, заполнение таблиц данными
        '..................
        DataGrid1.DataSource = ds.MyTable
End Sub
 
Private Sub DeleteRow()
        If MessageBox.Show("Видалити запис із словника?", "Видалення запису", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
            Dim currow As DataRow = CType(Me.BindingContext.Item(ds.MyTable).Current, DataRow)
            currow.Delete()
            'Тут вызываем DataAdapter.Update для отправки изменений в БД
            dscmd.Update(ds, "kod_pomol")
        End If
End Sub
Сообщ. #911045
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 7:42