Элемент управления Synfusion WinForms: на какие события можно подписаться при изменении содержимого ячейки - PullRequest
0 голосов
/ 10 февраля 2010

Прошло много лет с тех пор, как я использовал этот «API» (да, в кавычках, поскольку это, возможно, самый запутанный API, который я когда-либо встречал!)

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

Существует тысяча и одно событие , которые сообщают вам, когда ячейка изменилась, но когда вы запрашиваете свойство .Text соответствующего GridStyleInfo для ячейки, оно всегда сообщает вам это БЫЛ , а не то, что ЕСТЬ .

Это достаточно справедливо для таких событий, как CurrentCellChanging или CurrentCellValidating. Я читал, что вы можете запросить 'Renderer' текущей ячейки для ее значения во время этих событий.

Что мне не кажется правильным, так это когда я подписываюсь на CurrentCellValidated - текст ячеек все еще старое значение . Итак, CurrentCellValidated (я предполагаю) означает, что содержимое ячейки изменилось, проверка началась, проверка завершилась, проверка прошла успешно, но ... что проверено и где это?

Я знаю, каким будет мой следующий вопрос о StackOverflow - я дам вам подсказку: он содержит слова «SyncFusion», «Grid», «Alternative» !!

Приветствия

Steve

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Как сказал Клей, событие CurrentCellAcceptedChanges будет правильным местом для получения значения после его сохранения в GridStyleInfo.

Добавление дополнительной информации - Grid вызывает CurrentCellValidating перед выполнением каких-либо проверок. Если вы посмотрите на GridStyleInfo, есть такие свойства, как CellValueType (int, decimal, datetime и т. Д.), Format и CultureInfo. Когда вы устанавливаете эти свойства, Grid будет анализировать значения ячеек, основываясь на них. В случае связанных элементов управления - GridDataBoundGrid или GridGroupingControl, он будет считывать их из схемы источника данных (если доступно).

Таким образом, CurrentCellValidating запускается перед любой проверкой, CurrentCellValidation запускается после того, как Grid выполняет его анализ, и до того, как он сохраняется в GridStyleInfo.CellValue.

2 голосов
/ 17 февраля 2010

Событие CurrentCellValidated возникает до того, как измененное значение перемещается в базовый объект стиля. Если вы хотите перехватить изменение после того, как измененное значение было перемещено в базовый объект стиля, попробуйте использовать событие CurrentCellAcceptedChanged.

Вот пример, который показывает, как использовать оба события.

        private void Form1_Load(object sender, EventArgs e)
        {
            this.gridControl1.CurrentCellValidated += new EventHandler(gridControl1_CurrentCellValidated);
            this.gridControl1.CurrentCellAcceptedChanges += new CancelEventHandler(gridControl1_CurrentCellAcceptedChanges);
        }

        void gridControl1_CurrentCellAcceptedChanges(object sender, CancelEventArgs e)
        {
            GridCurrentCell cc = gridControl1.CurrentCell;
            Console.WriteLine("gridControl1_CurrentCellAcceptedChanges cell ({0},{1}) changed to: {2}", cc.RowIndex, cc.ColIndex, gridControl1[cc.RowIndex, cc.ColIndex].CellValue);
        }

        void gridControl1_CurrentCellValidated(object sender, EventArgs e)
        {
            GridCurrentCell cc = gridControl1.CurrentCell;
            Console.WriteLine("gridControl1_CurrentCellValidated cell ({0},{1}) changed to: {2}", cc.RowIndex, cc.ColIndex, cc.Renderer.ControlText);
        }
...