English 中文(简体)
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

最佳回答

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);
        }
问题回答

As Clay said, CurrentCellAcceptedChanges event would be the correct place to get the value after it has been stored to the GridStyleInfo.

Adding more info - Grid raises the CurrentCellValidating before it does any validations. If you look at the GridStyleInfo, there are properties like CellValueType (int, decimal, datetime, etc), Format and CultureInfo. When you set these properties, Grid would parse the cellvalues based on these. In case of bound controls - GridDataBoundGrid or GridGroupingControl, it would read it from the datasource s schema (if available).

So CurrentCellValidating is fired before any validations, CurrentCellValidation is fired after Grid does it s parsing and before it saves to the GridStyleInfo.CellValue.





相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签