none
C# В DataGridView, находящийся в virtual mode, не вводятся данные. RRS feed

  • Вопрос

  • Здравствуйте!

    На форме есть элемент управления DataGridView, Пока я не переключил его в виртуальный режим все было нормально: данные загружались в таблицу, пользователь мог их подредактировать и, далее, загрузить в БД. После того, как был включен виртуальный режим стало невозможно изменить данные в таблице, т.е пользователь что-то вводит новое, или редактирует, а изменения не сохраняются.Сам DataGridView находится в несвязанном режиме, данные в него попадают из коллекции. Есть мысль, что надо подписаться на событие CellValuePushed и сохранять изменившиеся данные куда-то, а потом сразу отображать.

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


    • Изменено nik_w 8 января 2013 г. 10:14
    8 января 2013 г. 10:06

Ответы

  • На самом деле вам осталось только реализовать CellValuePushed, а отображение у вас уже реализовано (CellValueNeeded).

    В случае если не хочется сохранять измененные значения в исходные данные коллекции, то можно реализовать сохранение во временную коллекцию измененных записей, а в CellValueNeeded уже проверять есть ли запрашиваемое Grid-ом значение во временной коллекции. Если есть - возвращаем его, если нет - возвращаем значение из исходной коллекции.

    • Помечено в качестве ответа nik_w 8 января 2013 г. 19:19
    8 января 2013 г. 19:16

Все ответы

  •    Добрый день!

        В самом простом случае для работы с DataGridView в виртуальном и несвязанном режиме Вам необходимо подписаться на два события:

    1) CellValueNeeded - через него Grid будет узнавать, какое значение из Вашего списка будет отображаться в ячейке с заданными координатами

    2) CellValuePushed - через него Grid будет сообщать, что в ячейке с заданными координатами изменилось значение на такое-то. Т.е. Вы должны сохранить его в свой список в нужное место

       Более подробно можно посмотреть здесь и здесь Практическое руководство. Реализация виртуального режима для элемента управления DataGridView в Windows Forms

    8 января 2013 г. 15:58
  • Добрый вечер!

    Я как раз и использую событие CellValueNeeded.Проблема в том, что при использовании virtual mode данные которые были введены в ячейку таблицы, стоит нажать на любую другую ячейку, не сохраняются.В обычном режиме данные остаются там, где их ввели или отредактировали. Вариант с CellValuePushed мне не очень нравится, потому-что не хочется изменять данные в коллекции. Ведь, задача-то, по сути проста: нужно, что-бы данные введенные пользователем не удалялись сразу-же из ячейки. Если это нормальное поведение для DataGridView с virtual mode, то тогда, да, буду куда-нибудь сохранять, а потом ведь, их еще нужно сразу отображать.

    8 января 2013 г. 18:27
  • На самом деле вам осталось только реализовать CellValuePushed, а отображение у вас уже реализовано (CellValueNeeded).

    В случае если не хочется сохранять измененные значения в исходные данные коллекции, то можно реализовать сохранение во временную коллекцию измененных записей, а в CellValueNeeded уже проверять есть ли запрашиваемое Grid-ом значение во временной коллекции. Если есть - возвращаем его, если нет - возвращаем значение из исходной коллекции.

    • Помечено в качестве ответа nik_w 8 января 2013 г. 19:19
    8 января 2013 г. 19:16