I have a UltraGrid the row layout style set as below.
grid.DisplayLayout.Bands[0].RowLayoutStyle = RowLayoutStyle.GroupLayout;
Usually when I want to perform an action on column resize I use the AfterColPosChanged event. However this event is not fired and testing suggests it is due to the RowLayoutStyle being set.
What event can I handle when the row layout style is set to GroupLayout?
ThanksPaul
Hello Paul,
You could use the 'AfterRowLayoutItemResized' event for that matter.
If you would like to catch when a column is resized, you could use a check-up like the following:
if (e.ResizeType == RowLayoutItemResizeType.SizeChange && e.RowLayoutItem.GetType() == typeof(UltraGridColumn) || e.RowLayoutItem.GetType() == typeof(Infragistics.Win.UltraWinGrid.ColumnHeader)) { //Your code here... }
if (e.ResizeType == RowLayoutItemResizeType.SizeChange && e.RowLayoutItem.GetType() == typeof(UltraGridColumn) || e.RowLayoutItem.GetType() == typeof(Infragistics.Win.UltraWinGrid.ColumnHeader))
{
//Your code here...
}
Please feel free to let me know if I misunderstood you or if you have any other questions.
Thanks Boris,
That did the trick nicely.
I have now got a related problem.
The event fires exactly as described however I keep getting a null exception when trying to use the following example code in the Infragistics help.
The code works fine when I resize the column by dragging the headers but when I resize the column by dragging the column divider on a row header is null and causes an exception.
header
When I simply out put type using e.RowLayoutItem.GetType() it returns Infragistics.Win.UltraWinGrid.RowAutoSizeLayoutManagerHolder+CellLayoutItem
e.RowLayoutItem.GetType()
private void ultraGrid1_AfterRowLayoutItemResized(object sender, Infragistics.Win.UltraWinGrid.AfterRowLayoutItemResizedEventArgs e) { Debug.Write( "AfterRowLayoutItemResized: " ); if ( e.RowLayoutItem is UltraGridColumn ) { // If the RowLayoutItem is an instance of UltraGridColumn, then cells associated // with that column are being resized. UltraGridColumn column = (UltraGridColumn)e.RowLayoutItem; Debug.Write( "Cell in row-layout resized. Column = " + column.Header.Caption );
} else { // If the RowLayoutItem is an instance of HeaderBase, then column header (also // referred to as column label) is being resized. HeaderBase header = (HeaderBase)e.RowLayoutItem; Debug.Write( "Header in row-layout resized. Header = " + header.Caption ); } Debug.WriteLine( " New Size = " + e.RowLayoutItem.PreferredSize.ToString( ) );
I need to know which column has been resized. Any help greatly appreciated.
Hello,
I tried this code in my sample and was not able to reproduce the null exception. I attached the application I am using to this post for you. Please review it and feel free to let me know if I misunderstood you or if you have any other questions.
Hi Boris,
I can't see the attached application?
Hi,
My bad. It is attached to the above post now.
I can see your example working. It has allowed me to narrow the problem down to the UltraGridGroups I create during InitializeLayout which are causing the problem.
However I can not see how they are causing the problem. I have attached a sample which demonstrates the problem.
Once again any help is greatly appreciated.
Many ThanksPaul
I am really happy that you were able to achieve what you were looking for with the resizing. I will be glad to assist you in the future if you have any questions.
That is excellent!
Thank you very much Boris for all your help.
I think that I got it now. You could put the following code in the 'else' body:
BindingFlags bf = BindingFlags.CreateInstance; foreach (BindingFlags bfs in Enum.GetValues(typeof(BindingFlags))) bf = bf | bfs; UltraGridColumn col1 = e.RowLayoutItem.GetType().GetField("Column", bf).GetValue(e.RowLayoutItem) as UltraGridColumn;
BindingFlags bf = BindingFlags.CreateInstance;
foreach (BindingFlags bfs in Enum.GetValues(typeof(BindingFlags))) bf = bf | bfs;
UltraGridColumn col1 = e.RowLayoutItem.GetType().GetField("Column", bf).GetValue(e.RowLayoutItem) as UltraGridColumn;
'Col1.Key' will give you the key of the resized column.
Please do not hesitate to ask if something comes up.
Having tried casting the RowLayoutItem to several different types (always with an error) I still can not discover a way of finding which column has been resized.
I can not find any documentatiopn on Infragistics.Win.UltraWinGrid.RowAutoSizeLayoutManagerHolder+CellLayout and despite having a reference to Infragistics.Win.UltraWinGrid there is not publicly visible RowAutoSizeLayoutManagerHolder class.
I would really appreciate any ideas anyone has about this problem?
Many Thanks
The problem I have with this solution is I do not know how to find out which column has been resized.
Any ideas?