DashboardLayout for WinForms | ComponentOne
Features / Layouts
In This Topic
    Layouts
    In This Topic

    DashboardLayout supports the following three types of layouts which determine the way child containers are arranged in your application. DashboardLayout allows you to set these layout types using its LayoutType property. This property accepts the values from LayoutType enumeration.

    Flow Layout

    DashboardLayout allows you to set the layout type to flow layout using its LayoutType property of C1DashboardLayout class. This layout arranges its contents in horizontal or vertical flow direction. The flow direction of the contents can be specified by using the FlowDirection property which accepts the values from FlowDirection enumeration. The possible values for this enumeration are as follows; LeftToRight, TopDown, RightToLeft and BotttomUp.

    By default, the FlowDirection property is set to LeftToRight. Therefore, when a control is dragged on the flow layout, the newly created child container positions itself on the upper left corner. When you add more controls to the layout, child containers get created and placed in left to right direction. As soon as the width of DashboardLayout has exhausted, the child containers automatically get wrapped and shift to the next row. In case you do not want the child containers to wrap, you can set the value of the WrapContent property to False.

    In flow layout, the control allows you to stop laying the controls in a particular row and start from the new row using the SetFlowBreak property.

    Note that the flow layout reverses its flow direction in Right-to-Left (RTL) layouts i.e. when RightToLeft property is set to True.

    The following image shows controls arranged in flow layout with FlowDirection property set to RightToLeft.

    Flow layout

    The flow layout can be accessed with the help of the FlowLayoutControl property which returns an instance of FlowLayoutPanel class. This instance is used to set the properties of flow layout. The following code illustrates some of the properties of the flow layout:

    c1DashboardLayout1.LayoutType = LayoutType.Flow;
    c1DashboardLayout1.FlowLayoutControl.FlowDirection = FlowDirection.RightToLeft;
    c1DashboardLayout1.FlowLayoutControl.WrapContents = true;
    c1DashboardLayout1.FlowLayoutControl.SetFlowBreak((Control)c1DashboardLayout1.Items[0].ItemContainer, true);
    
    c1DashboardLayout1.LayoutType = LayoutType.Flow
    c1DashboardLayout1.FlowLayoutControl.FlowDirection = FlowDirection.RightToLeft
    c1DashboardLayout1.FlowLayoutControl.WrapContents = True
    c1DashboardLayout1.FlowLayoutControl.SetFlowBreak(CType(c1DashboardLayout1.Items(0).ItemContainer, True, Control))
    

    To create a DashboardLayout using flow layout, see Creating Dashboard with Flow Layout topic.

    Grid Layout

    DashboardLayout allows you to set the layout type to grid layout using its LayoutType property of C1DashboardLayout class. When you set the layout type to Grid, the grid layout gets attached to the DashboardLayout control. The grid layout divides the C1DashboardLayout container into rows and columns. By default, there are three columns and two rows in the grid layout. However, you can increase the column and row count using the ColumnCount and RowCount properties of the TableLayoutPanel class.

    In grid layout, any control you drag on the DashboardLayout control is placed in one of the cells. As soon as you drag a control, a child container of type Panel gets created to hold the control. By default, this child container is not docked in the cell, but you can dock the child container to occupy the complete space of the cell. When all the cells in the grid are occupied and a new control is dragged then the layout expands. It either adds a new row/column depending on the GrowStyle property to accommodate the control. The GrowStyle property accepts one of the following values from the TableLayoutPanelGrowStyle enumeration:

    By default, grid layout expands to add new rows. Moreover, this layout also supports cell merging, wherein a child container can span multiple rows and columns. The cell merging is enabled by setting the RowSpan and ColumnSpan properties of the child container available in the designer.

    The following image shows controls arranged in grid layout with GrowStyle property set to TableLayoutPanelGrowStyle.AddRows.

    Grid layout

    The grid layout can be accessed by using the GridLayoutControl property of the C1DashboradLayout class. This property returns an instance of the TableLayoutPanel class. This instance is further used to set the properties of grid layout as illustrated in the following code:

    // Set Grid layout
    _gridLayout.LayoutType = LayoutType.Grid;        
    // Setting the properties of grid layout
    _gridLayout.GridLayoutControl.GrowStyle = TableLayoutPanelGrowStyle.AddRows;
    
    ' Set Grid layout
    _gridLay.LayoutType = LayoutType.Grid        
    ' Setting the properties of grid layout
    _gridLay.GridLayoutControl.GrowStyle = TableLayoutPanelGrowStyle.AddRows
    

    To create a DashboardLayout using grid layout, see Creating Dashboard with Grid Layout topic.

    Grid Layout Smart Tag

    In grid layout, the control provides you with a smart tag using which you can easily perform the following actions:

    Row and Column Sizing

    Dashboard also allows you to set the row and column sizes in code using RowStyles and ColumnStyles properties of the TableLayoutPanel class. When the grid layout arranges its rows/columns, it assigns priorities to RowStyles or ColumnStyles for each row or column in the following order:

    The rows and columns can be resized using the resize handle in the form designer.

    For more information, see TableLayoutPanel class for exploring other properties of grid layout.

    Split Layout

    DashboardLayout allows you to set the layout type to split layout which allows you to add multiple panels to the layout. When the DashboardLayout control is added to the form, by default its LayoutType is set to Split.

    The following image shows controls arranged in split layout.

    Split layout

    The split layout can be accessed by using the SplitLayoutControl property of C1DashboradLayout class. This property returns an instance of C1SplitContainer class which is further used to set the properties of split layout as shown in the following code:

    c1DashboardLayout1.SplitLayoutControl.SplitterColor = Color.Black;
    c1DashboardLayout1.SplitLayoutControl.SplitterWidth = 10;
    c1DashboardLayout1.SplitLayoutControl.LineBelowHeader = false;
    
    c1DashboardLayout1.SplitLayoutControl.SplitterColor = Color.Black
    c1DashboardLayout1.SplitLayoutControl.SplitterWidth = 10
    c1DashboardLayout1.SplitLayoutControl.LineBelowHeader = False
    

    To create a DashboardLayout using split layout, see Creating Dashboard with Split Layout topic.

    Split Layout Smart Tag

    Clicking on the split layout’s smart tag opens up its task menu with which you can add panels to the split layout. On adding the first panel to the split layout, it fills the entire layout’s space and adding the second panel splits the panel horizontally and adds a horizontal splitter bar that separates the two panels. However, you can change this behavior and split the panel vertically. To create a vertical split, set the first panel’s Dock property to Left.

    The created panels are of the type C1SplitterPanel. You can edit the panels with the help of split layout’s Panels property or with the help of Edit Panels option in the split layout’s smart tag. The split layout contains the following four elements:

    Positioning Panels

    The position of C1SplitterPanel can easily be controlled by the Dock property. The C1SplitterPanel can be docked to the top, left, right or bottom on the container to which the C1SplitterPanel has been assigned. The last panel in the panel collection behaves a little different as the applied properties on the panel are ignored and its Dock property is set to Fill.

    You can change the specific properties of a child container i.e. C1SplitterPanel as shown in the following code:

    _splitLayout.SplitLayoutControl.Panels[0].Collapsible = true;
    _splitLayout.SplitLayoutControl.Panels[0].Dock = C1.Win.C1SplitContainer.PanelDockStyle.Left;
    _splitLayout.SplitLayoutControl.Panels[0].HeaderBackColor = System.Drawing.Color.Yellow;
    _splitLayout.SplitLayoutControl.Panels[0].HeaderForeColor = System.Drawing.Color.Green;
    _splitLayout.SplitLayoutControl.Panels[0].HeaderTextAlign = C1.Win.C1SplitContainer.PanelTextAlign.Center;
    _splitLayout.SplitLayoutControl.Panels[0].Resizable = false;
    _splitLayout.SplitLayoutControl.Panels[0].ResizeWhileDragging = true;
    _splitLayout.SplitLayoutControl.Panels[0].SizeRatio = 50;
    _splitLayout.SplitLayoutControl.Panels[0].Text = "Sales By Category";
    
    _splitLayout.SplitLayoutControl.Panels(0).Collapsible = True
    _splitLayout.SplitLayoutControl.Panels(0).Dock = C1.Win.C1SplitContainer.PanelDockStyle.Left
    _splitLayout.SplitLayoutControl.Panels(0).HeaderBackColor = System.Drawing.Color.Yellow
    _splitLayout.SplitLayoutControl.Panels(0).HeaderForeColor = System.Drawing.Color.Green
    _splitLayout.SplitLayoutControl.Panels(0).HeaderTextAlign = C1.Win.C1SplitContainer.PanelTextAlign.Center
    _splitLayout.SplitLayoutControl.Panels(0).Resizable = False
    _splitLayout.SplitLayoutControl.Panels(0).ResizeWhileDragging = True
    _splitLayout.SplitLayoutControl.Panels(0).SizeRatio = 50
    _splitLayout.SplitLayoutControl.Panels(0).Text = "Sales By Category"