Search code examples
winformsgridsyncfusion

Synfusion WinForms grid control: What events can I subscribe to for when a cell's content changes


It's been many years since I've used this "API" (yes, in quotes, as it's possibly the most confusing API I've ever come across!)

My need is a very simple one. I want to subscribe to an event that tells me that a cell's content has changed and what the new content is.

There are a thousand and one events fired that tell you when a cell has changed, but when you query the .Text property of the associated GridStyleInfo for the cell, it always tells you what it WAS and not what it IS.

This is fair enough for events like CurrentCellChanging or CurrentCellValidating. I've read that you can ask the 'Renderer' of the current cell for it's value during these events.

What doesn't seem right to me is when I subscribe to CurrentCellValidated - the cells text is still the old value. So, CurrentCellValidated (I assume) means that the cell's content has changed, validation has started, validation has ended, validation has succeeded, but... what's been validated and where is it?

I know what my next question on StackOverflow is going to be - I'll give you a hint: it contains the words 'SyncFusion', 'Grid', 'Alternative'!!

Cheers,

Steve


Solution

  • The CurrentCellValidated event is raised before the changed value is moved into the underlying style object. If you want to catch the change after the changed value has been moved into the underlying style object, then try using the CurrentCellAcceptedChanged event.

    Here is an example that shows how to use both events.

            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);
            }