2013-04-08 10 views
0

У меня проблема, с которой я слишком долго стучал головой, и я не могу найти решения.Отслеживание изменений строк в GridControl в DevExpress C#

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

Большая часть нашего приложения вращается вокруг изменений, внесенных в элементы управления сеткой, которые привязаны к объектам DataTable.

Одним из наиболее важных сообщений, которые нам нужны для отправки, является изменение строки в нашем элементе управления сеткой. Поэтому, если какое-либо значение в строке изменяется, мы хотим отправить сообщение со старыми значениями строк и новыми значениями строк, чтобы у нас была запись старых и новых. Мы хотим, чтобы это произошло, когда строка теряет фокус, а не сразу после изменения любой стоимости. Это значит, что кто-то может изменить всю строку перед отправкой сообщения.

Текущее решение, которое я использую, не работает, и даже не стоит объяснять.

По существу, мне нужно получить список ключей/значений значений строк и столбцов как для старой строки, так и для новой строки.

Я не уверен, как это сделать в DevExpress.

+0

Может ли я знать, какой уровень отслеживания вы хотели бы отслеживать, так как элементы управления сеток связаны с объектами таблицы данных, может встроенное сообщение диспетчера контролировать уровень объектов таблиц данных? вы можете отслеживать старые/новые значения только в том случае, если состояние данных находится в допустимых значениях, или вам нужно отслеживать событие, пока пользователь находится в состоянии редактирования в сетке devexpress? – Turbot

ответ

-3

Я думаю, вы должны использовать aspxgridview.rowupdating событие, которое даст вам как старые, так и новые значения по свойствам e.OldValues ​​и e.NewValues.

Таким образом, вы можете иметь оба значения для своих записей.

Для более подробного объяснения я бы рекомендовал вам посетить следующие ссылки: (я надеюсь, что это помогает)

http://www.devexpress.com/Support/Center/Question/Details/Q314701

http://www.devexpress.com/Support/Center/Question/Details/Q261712

http://www.devexpress.com/Support/Center/Question/Details/Q293847

http://www.devexpress.com/Support/Center/Question/Details/Q350500

http://www.devexpress.com/Support/Center/Question/Details/B202180

+0

Как говорится, он предназначен для управления окнами, а не для Интернета. – jcvegan

-1

Вы можете создать BindingList с данными из DataTable. Затем вам нужен новый класс, и каждый объект представляет строку в вашем DataTable. Затем вы добавляете каждый объект в BindingList и используете его как DataSource. Теперь событие BindingList.ListChanged приведет к срабатыванию измененного значения foreach в сетке. Это дает вам доступ к старым и новым значениям. Возможно, вам нужно реализовать интерфейс INotifyPropertyChanged в своем классе, чтобы узнать, изменена ли ячейка.

1

Одной из идей для этого было бы использовать индексы строк, предоставляемые сетями DevExpress. После того, как у вас есть индекс строки измененной строки, вы можете делать с ней все, что хотите (вставлять в объект, сохранять данные, хранящиеся в строке, выделять строку и т. Д.), Используя этот индекс строки. Это, как вы получаете доступ индексов выбранных строк в сетке:

List<int> rowHandles = gridView.GetSelectedRows().ToList();