none
datagridview номера отредактированных строк RRS feed

  • Вопрос

  • В datagridview можно редактировать строки. Я хочу сделать 2 кнопки(Сохранить, Отмена).
    При нажатии на кнопку сохранить, мне нужно получить номера строк, в которых было сделано хоть 1 изменение в любой из ячеек.
    При нажатии на кнопку отмена - вернуть все в первоначальное состояние.
    Как это сделать?
    16 июня 2013 г. 12:52

Ответы

  • Я никогда не работал с MySql в дотнете. Однако, судя по описанию этого коннектора на официальном вебсайте, он является полноценным ADO.NET-провайдером.

    DataTable - это по сути то же самое, что одна таблица в базе данных.

    DataSet - это набор таблиц. В нём можно задать связи между таблицами, ограничения (constraints), первичные/внешние ключи и пр.

    Поэтому, следует использовать то, чего будет достаточно. Вам подойдёт DataTable.

    Главное достоинство этих классов в том, что они содержат в себе набор строк DataRow, каждая из которых содержит поддерживает как текущее значение, так и предыдущее (бывшее до изменения).

     

    Посмотрите пример кода по ссылке, пункт 22.2.4.1.3. Working with Decoupled Data. Там используется DataAdapter, который вызовом одного метода Fill заполняет таблицу (или набор таблиц). Очень простой код.

    А дальше, как я писал ранее, достаточно методов AcceptChanges, RejectChanges, GetChanges для принятия/отмены/получения изменённых данных.

    16 июня 2013 г. 17:17

Все ответы

  • Телепаты в отпуске!

    Какой язык используется? Какая платформа? Как данные поступают в компонент?

    Полагаю, речь идёт о DataGridView из WindowsForms. Если так, то данные следует хранить в DataSet или DataTable. С их использованием код получается элементарный. Получаем измененения с помощью метода GetChanges(DataRowState.Modified). Отменяем изменения: RejectChanges().

    16 июня 2013 г. 14:11
  • Спасибо за ответ. Извиняюсь что не написал, котелок уже не варит. C# использую.

    Но дело в том, что я данные получаю с помощью MySQL коннектора, примерно как в этом примере (функция Select):

    http://www.codeproject.com/Articles/43438/Connect-C-to-MySQL

    Получается что данные из БД считываются у меня в List<List<string>>

    И заполняю datagridview я напрямую из этого же списка двумерного. Как я понял, мне все же будет удобнее использовать то, что вы посоветовали.

    Но что мне больше подойдет DataSet или DataTable? DataSet или DataTable это что-то вроде массива для хранения данных с дополнительными возможностями? Могу ли я записать в них данные из List<List<string>>, если да, то как?

    Или может можно записывать данные сразу во время построчного считывания?

            //Read the data and store them in the list
            while (dataReader.Read())
            {
                list[0].Add(dataReader["id"] + "");
                list[1].Add(dataReader["name"] + "");
                list[2].Add(dataReader["age"] + "");
            }

    В общем нужно как-то записать данные DataSet или DataTable, но я хочу использовать именно этот провайдер. Не хочу odbc или еще что. Очень надеюсь что вы поможете, времени мало у меня(

    • Изменено yura0392 16 июня 2013 г. 16:39
    16 июня 2013 г. 16:14
  • Я никогда не работал с MySql в дотнете. Однако, судя по описанию этого коннектора на официальном вебсайте, он является полноценным ADO.NET-провайдером.

    DataTable - это по сути то же самое, что одна таблица в базе данных.

    DataSet - это набор таблиц. В нём можно задать связи между таблицами, ограничения (constraints), первичные/внешние ключи и пр.

    Поэтому, следует использовать то, чего будет достаточно. Вам подойдёт DataTable.

    Главное достоинство этих классов в том, что они содержат в себе набор строк DataRow, каждая из которых содержит поддерживает как текущее значение, так и предыдущее (бывшее до изменения).

     

    Посмотрите пример кода по ссылке, пункт 22.2.4.1.3. Working with Decoupled Data. Там используется DataAdapter, который вызовом одного метода Fill заполняет таблицу (или набор таблиц). Очень простой код.

    А дальше, как я писал ранее, достаточно методов AcceptChanges, RejectChanges, GetChanges для принятия/отмены/получения изменённых данных.

    16 июня 2013 г. 17:17