Tuesday, 16 January 2018

Show/Hide Grids on the Fly

Hi Everyone,

Sometimes you need to show user interface differently depend on parameters selected. Here I want to show you an approach where you can show different grids depend on parameters selected in filter.

You may need different grids in the following cases:
  • If have different data access classes (tables) to show.
  • If you need to have different grids layout depend on parameters.
  • If you  need to to have different columns configurations.
So the plan is the following:
  1. Have 2 different DACs. We need it to have different caches, as viability settings are linked to cache.
    1. public class DetailsTableA IBqlTable
      {
            public abstract class fieldAIBqlField }  
            [PXDBString(1)]
            [PXUIField(DisplayName "Field A")]
            public virtual String FieldA getset}  
      }
    2. public class DetailsTableB IBqlTable
      {
            public abstract class fieldBIBqlField }  
            [PXDBString(1)]
            [PXUIField(DisplayName "Field B")]
            public virtual String FieldB getset}  
      }
  2. Have 2 different DataViews to link grids to different DACs.
    1. public PXFilter<DetailsTableADetailsViewA;
    2. public PXFilter<DetailsTableBDetailsViewB;
  3. Have 2 different grids in the user interface.
  4. In the RowSelected Event of Form choose one or another grid and using Cache.AllowSelect = true/false choose what grid should be visible.
    1. public void MasterTable_RowSelected(PXCache sender
            PXRowSelectedEventArgs e)
      {
            MasterTable row (MasterTable)e.Row;
            
            bool val =  row == null || row.Status == "A";
            DetailsViewA.Cache.AllowSelect val;
            DetailsViewB.Cache.AllowSelect !val;          
      }
Acumatica will automatically sync grid visibility and hide/show grids dynamically.
Acumatica two Grids in UI

You can see full code here:

Have a nice development!

No comments: