none
Сохранение в БД sql compact RRS feed

  • Вопрос

  • Добрый день. WPF, c#

    Есть ДатаГрид. Выделяю ячейку и получаю индексы столбца и строки 1 таблицы. 

    var ci = dg.CurrentColumn.DisplayIndex;           //индекс столбца
    var di = dg.SelectedIndex;   //индекс строки

    Из ДатаСета другой таблицы (эта же БД) получаю значение нужной ячейки по этим индексам. (В TextBox)

    var code = ds2.code.Rows[di][ci].ToString();
    tb.Text = code;
    Как сделать, чтобы при изменении этого текста в текстбоксе, менялось это значение в датасете, а затем соответственно в БД. Если занести изменения в Датасет, то чтобы перенести все это в базу, достаточно будет вызвать метод Update у Адаптера?


    15 апреля 2012 г. 5:41

Ответы

  • Да достаточно вызвать метода Update у TableAdapter, чтобы модифицированные строки сохранились в БД, а после еще вызвать AcceptChanges, чтобы "сбросить" состояние строк.

    После изменения строки вам возможно потребуется также изменить ее состояние с помощью свойства DataRow.RowState, на Modified для того, чтобы метод Update сработал верно.


    Для связи [mail]

    16 апреля 2012 г. 8:29
  • К чему привязан DataGrid - там и будет добавляться строка. Вы можете с помощью метода GetChanges выбрать из 1го датасета все новые строки (передав методу соответсвующее RowState.Added), и после с помощью Merge обяединить эти строки со 2ым DataSet. Только потом для 1го датасета эти стрики нужно пометить как unchanges или вообще удалить.

    Другой вариант - подписаться на событие DataTable.TableNewRow Event и попробовать в нем обработаь добавление строки как вам нужно.


    Для связи [mail]

    16 апреля 2012 г. 10:54

Все ответы

  • Если что, прикладываю решение

    http://dl.dropbox.com/u/40467762/BD.rar

    15 апреля 2012 г. 10:38
  • Это не ответ. Это мой проект, где находится проблема)
    15 апреля 2012 г. 13:25
  • Да достаточно вызвать метода Update у TableAdapter, чтобы модифицированные строки сохранились в БД, а после еще вызвать AcceptChanges, чтобы "сбросить" состояние строк.

    После изменения строки вам возможно потребуется также изменить ее состояние с помощью свойства DataRow.RowState, на Modified для того, чтобы метод Update сработал верно.


    Для связи [mail]

    16 апреля 2012 г. 8:29
  • Нашел в чем проблема. При добавлении новой строки в ДатаГрид, она добавляется в ДатаСет1. И по индексу новой строки и столбца я ищу ячейку во втором Датасете2. Но в нем новоя строка не создана, и при попытке задать значение не существующей ячейке,

    ds2.code.Rows[di][ci] = tb.Text

     программа вылетает. Как сделать так, чтобы при добавлении строки в ДатаГриде ( т.е. ДатаСете1), добавлялась строка в ДатаСет2? 

    Заранее спасибо

    16 апреля 2012 г. 10:23
  • К чему привязан DataGrid - там и будет добавляться строка. Вы можете с помощью метода GetChanges выбрать из 1го датасета все новые строки (передав методу соответсвующее RowState.Added), и после с помощью Merge обяединить эти строки со 2ым DataSet. Только потом для 1го датасета эти стрики нужно пометить как unchanges или вообще удалить.

    Другой вариант - подписаться на событие DataTable.TableNewRow Event и попробовать в нем обработаь добавление строки как вам нужно.


    Для связи [mail]

    16 апреля 2012 г. 10:54