1 & 3) If you need this type of functionality, you may be better off using a GridGroupinControl where it is supported instead of a GridDataBoundGrid where you have to code it yourself.
If you want to do it in a GridDataBoundGrid, here is a KB. http://www.syncfusion.com/Support/article.aspx?id=10398
2) You add a DataColumn to the DataTable that is the DataSource for the GridDataBoundGrid, and set the DataColumn.Expression property. Again, this is something supported directly in GridGroupingControl but not in GridDataBoundGrid.
4) I am not sure what you are asking. Do you want to know the the actual events? If so, for a GridDataBoundGrid, CurrrentCellChanged is raised with every change in a cell. (This means with every key troke if your user is typing.) CurrentCellValidating is raised when your user leaves the cell. You can cancel this action by setting e.Cancel after testing grid.CurrentCell.Renderer.ControlText to see if it is something you want to allow. Here is a little snippet that checks for a double in particular column in a GridDataBoundGrid.
private void gridDataBoundGrid2_CurrentCellValidating(object sender, CancelEventArgs e)
{
GridCurrentCell cc = this.gridDataBoundGrid2.CurrentCell;
if(cc.ColIndex == 7)
{
string newValue = cc.Renderer.ControlText;
try
{
double d = double.Parse(newValue);
}
catch
{
cc.ErrorMessage = "Not a double...";
e.Cancel = true;
}
}
}
In a GridDataBoundGrid, changes are cached on a row by row basis, and are only pushed to the datasource when the user leaves the row. There are events asociated with these actions as well, RowLeave, RowSaved, RowEditing and RowEnter.
For a GroupingGridControl, the CurrentRecordContextChange event is raised at several points during the current cell activating editing process. You can check e.Action in this event to get the context. You also have access to the TableControlCurrentCellChanged and TableControlCurrentCellValidating events (like GridDataBoundGrid). Here is a forum thread with some info on this event. http://www.syncfusion.com/Support/Forums/message.aspx?MessageID=22307
5) In a GridDataBoundGrid, you can use the grid.Binder.BindingListChanged to get at the ListChanged event on the datasource. You can check the ListChangeType to see that different actions that are caught by this event. Normally, ILists only raised a ListChanged event which is after the action and not prior to the action. SO, I do not know of a good way to get the actions handled in ListChanged before thay actually take place in the DataSource in general. If youwant to catch actions from changes within the grid itself (not actions done by some other datasource user outside the grid), you can use the row events mentioned above.
In a GridGroupingControl, there are SourceListRecordChanging and SourceListRecordChanged events. You can check the e.Action to see what action is taking place. Here is a little sample showing these vents.
http://www.syncfusion.com/Support/user/uploads/GGC_ChangeEvents_727fbb1.zip
6) The TableControlCurrentCellChanged event in GridGroupingControl and the CurrentCellChanged event in GridDataBoundGrid should be raised with a change to a combobox cell.