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.
Hi,
My bad. It is attached to the above post now.
Hi Boris,
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 can see the issue now. You could narrow it even more by checking if the item is a 'HeaderBase' and add one more else - something like this:
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 (e.RowLayoutItem is HeaderBase) { // 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); } else { // if the item is a CellLayoutItem.............. // }
Please let me know if I misunderstood you requirement, I will be glad to assist you further.
The problem I have with this solution is I do not know how to find out which column has been resized.
Any ideas?
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.
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.