Skip to content

Infragistics Community Forum / Desktop / Ultimate UI for Windows Forms / Freeze the first two visible columns of a ultrawingrid on horizontal scroll

Freeze the first two visible columns of a ultrawingrid on horizontal scroll

New Discussion
Seraphin
Seraphin asked on Dec 13, 2012 2:24 PM

Hi there,

I’m using a ultrawingrid in one of my windows project and what’s I’m trying to do is to be abled to freeze the fist two columns of the grid on a horizontal scroll. I use the following code :

e.Layout.UseFixedHeaders = true;

e.Layout.Bands[0].Columns[“hrpd_iNo”].Header.Fixed = true;

e.Layout.Bands[0].Columns[“bxpd_xDesc”].Header.Fixed = true;

 

This code works only if I set the ultragridband’s UseRowLayout property to false.

1) Is there a way to make this code works even if the UserRowLayout property is true?

2) I’m trying to export the same grid to EXCEL by using  UltragridExcelExporter object; and my app juste freeze in the export() method…. Is it because I’m using the RowLayout in my grid also?

Thanks for your help,

Seraphin

 

Sign In to post a reply

Replies

  • 0
    Mike Saltzman
    Mike Saltzman answered on Sep 2, 2008 2:39 PM

    1) Is there a way to make this code works even if the UserRowLayout property is true?
    No. RowLayouts and Fixed headers are mutually exclusive.
    2) I’m trying to export the same grid to EXCEL by using  UltragridExcelExporter object; and my app juste freeze in the export() method…. Is it because I’m using the RowLayout in my grid also?
    No, you can export a grid using a RowLayout, that should not be a problem. I don’t know why it’s freezing on you. Are you using the latest Hot Fix? Can you duplicate the problem in a small sample project?

    • 0
      David
      David answered on Oct 2, 2008 10:02 PM

       What if you have two fields in a group?  Can you make the group fixed?

      • 0
        Mike Saltzman
        Mike Saltzman answered on Oct 2, 2008 10:25 PM

        Yes. In fact, if you are using groups, then you can only fix groups, you cannot fix individual columns, since the columns have to stay in the group. 

      • 0
        Ivan
        Ivan answered on Jul 24, 2009 8:50 PM

        So how do you do it?  I have 2 groups.  I'd like to freeze one group( the first 4 columns) but that functionailty seems to conflict with using RowLayoutInfo to manage my column headers.  Below is a pic of the header structure I want.  The second pic shows the groups that I want.  Notice the only run-time difference is the selection state of the Use Row Layout checkbox.  I have seen hints and implications that this can be done, but no sample code.  I can provide code for my example if it would help sort all of this out.  Thx!

         Pic 1: UseRowLayout = true;  Column headers "stacked"  a "visual" groups. 

         

        Pic 2: UseRowLayout = false;  Columns correctly frozen, but lost the headers. 

      • 0
        Mike Saltzman
        Mike Saltzman answered on Jul 27, 2009 3:26 PM

        So how do you do it?  I have 2 groups.  I’d like to freeze one group( the first 4 columns) but that functionailty seems to conflict with using RowLayoutInfo to manage my column headers.

        – That’s correct. RowLayouts and Fixed Header are mutually exclusive features. You cannot fix coumns or groups when using RowLayouts.

        Perhaps you could use a ColScrollRegion, instead?

      • 0
        Ivan
        Ivan answered on Jul 27, 2009 7:16 PM

        In your last comment, you seem to imply that I could fix the columns via grouping which is why I asked.   

        I'll look into ColScrollRegion.

        Thx,

        Ivan

      • 0
        Mike Saltzman
        Mike Saltzman answered on Jul 28, 2009 2:20 PM

        Hi Ivan,

        Sorry for the confusion. You can fix groups, but only in the standard mode, not in RowLayout mode.

      • 0
        Ivan
        Ivan answered on Aug 6, 2009 10:34 PM

        Below is the code I ended up using.  A "node" is basically a column definition from a content perspective without regard for what is in the grid.  A node without a parent or child is one of my "fixedNodes".     

        One interesting bug shows up when the split isn't visible, as in the fixed width is larger than the width of the grid.  The app throws an exception when that occurs, so I had to write a simple check before implementing the split. 

        Enjoy,
        Ivan

        private

         

        void FreezeColumns()

        {

         

          List<int> fixedNodes = DataFormat.AllNodes.Where(i => i.ListLength == 1).Select(i => i.LeftLowestChildIndex).ToList();

         

          UltraGridLayout layout = ultraGrid1.DisplayLayout;

         

          UltraGridBand band = layout.Bands[0];

         

          int fixedWidth = band.Columns.Cast<UltraGridColumn>().Where(i => fixedNodes.Contains(i.Index)).Sum(i => i.Width) – 1;

          layout.ColScrollRegions.Clear();

          layout.MaxColScrollRegions = 2;

         

          if ( fixedWidth < ultraGrid1.Width )

          {

            layout.ColScrollRegions[0].Split(fixedWidth);

            layout.ColScrollRegions[0].Scrollbar =

        Scrollbar.Hide;

          }

         

          else

          {

            layout.ColScrollRegions[0].Split();

          }

          layout.ColScrollRegions[1].ScrollHeaderIntoView(band.Columns[fixedNodes.Max(i => i) + 1].Header,

        true);

        }

      • 0
        Paul Scannell
        Paul Scannell answered on Dec 12, 2012 1:54 PM

        Ivan,

        Thanks for that code snippet.  I copied it into my code but got an error on the reference for DataFormat and 'band.Columns.Cast<UltraGridColumn>()'.

        Hopefully this post is still active.  Thanks in advance, Paul

      • 0
        Mike Saltzman
        Mike Saltzman answered on Dec 12, 2012 3:02 PM

        What were the errors?

      • 0
        Paul Scannell
        Paul Scannell answered on Dec 12, 2012 3:16 PM

        For the DataFormat: "The name 'DataFormat' does not exist in the current context"

         

        And for: band.Columns.Cast<UltraGridColumn>()

        Error 26 'Infragistics.Win.UltraWinGrid.ColumnsCollection' does not contain a definition for 'Cast' and the best extension method overload 'System.Data.EnumerableRowCollectionExtensions.Cast<TResult>(System.Data.EnumerableRowCollection)'…

         

      • 0
        Ivan
        Ivan answered on Dec 12, 2012 3:41 PM

        Cast<> should be LINQ.  You could also try OfType<>.  Both are in teh System.Linq namespace, the System.Core assembly.

         

        Cast

        http://msdn.microsoft.com/en-us/library/bb341406.aspx

        OfType

        http://msdn.microsoft.com/en-us/library/bb360913.aspx

         

        Hopefully, that helps with part of your issue.

      • 0
        Mike Saltzman
        Mike Saltzman answered on Dec 13, 2012 2:24 PM

        My guess is that you are using CLR2 and these are new language features in CLR3/CLR4.

  • You must be logged in to reply to this topic.
Discussion created by
Favorites
Replies
Created On
Last Post
Discussion created by
Seraphin
Favorites
0
Replies
13
Created On
Dec 13, 2012
Last Post
13 years, 2 months ago

Suggested Discussions

Tags

Created by

Created on

Dec 13, 2012 2:24 PM

Last activity on

Feb 25, 2026 10:21 AM