Question

I have objects which looks like this:

public class ComponentProperty
{        
    public string Property { get; set; }
    public object Value { get; set; }
    public string DataType { get; set; }
    public string PropertyKey { get; set; }
    public string Unit { get; set; }
    public string DependencyType { get; set; }
    public object ListType { get; set; }

    public List<ComponentProperty> Properties { get; set; }
}

I have information build over in the following form of BindingList where Output is:

public class ComponentPropertyList: BindingList<ComponentProperty>
{

}

Scenario:

List of Component Properties bind to a Infragistics Ultra WinGrid to generate Master- Detail View and i made following customization in Grid settings:

void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
{
    ultraGrid1.DisplayLayout.Override.AllowColSizing = AllowColSizing.Synchronized;
    e.Layout.Bands[0].Override.HeaderAppearance.FontData.Bold = Infragistics.Win.DefaultableBoolean.True;
    ultraGrid1.DisplayLayout.Appearance.BackColor = Color.White;
    ultraGrid1.DisplayLayout.Appearance.BackColor2 = Color.White;
    ultraGrid1.DisplayLayout.Override.ActiveRowAppearance = null;
    ultraGrid1.DisplayLayout.BorderStyle = UIElementBorderStyle.None;
    ultraGrid1.DisplayLayout.Override.BorderStyleCell = UIElementBorderStyle.None;
    ultraGrid1.DisplayLayout.Override.BorderStyleRow = UIElementBorderStyle.None;
    ultraGrid1.DisplayLayout.Override.ColumnAutoSizeMode = ColumnAutoSizeMode.Default;
    ultraGrid1.DisplayLayout.Bands[0].ColHeadersVisible = true;
    ultraGrid1.DisplayLayout.Bands[0].Override.RowSelectors = DefaultableBoolean.False;
    ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellActivation = Activation.NoEdit;
    ultraGrid1.DisplayLayout.Bands[0].Columns[1].CellActivation = Activation.AllowEdit;
    //Infosys: Nikita - Added for #1143 - START
    ultraGrid1.DisplayLayout.Bands[0].Columns["Unit"].CellActivation = Activation.NoEdit;
    //Infosys: Nikita - Added for #1143 - END
    ultraGrid1.DisplayLayout.Bands[0].Columns[1].CellAppearance.BorderColor = Color.Black;
    ultraGrid1.DisplayLayout.Override.RowAppearance.TextVAlign = VAlign.Middle;
    // e.Layout.Bands[0].Columns[1].Width = 90;
    ultraGrid1.DisplayLayout.Scrollbars = Scrollbars.Automatic;
    ultraGrid1.DisplayLayout.ScrollBounds = ScrollBounds.ScrollToFill;
    ultraGrid1.DisplayLayout.AutoFitStyle = AutoFitStyle.ResizeAllColumns;
    ultraGrid1.DisplayLayout.Bands[0].Columns[2].AutoSizeMode = ColumnAutoSizeMode.None;
    ultraGrid1.DisplayLayout.Bands[0].Columns[3].AutoSizeMode = ColumnAutoSizeMode.None;
    ultraGrid1.DisplayLayout.Bands[0].Columns[2].Hidden = true;
    ultraGrid1.DisplayLayout.Bands[0].Columns[3].Hidden = true;
    //ultraGrid1.DisplayLayout.Bands[0].Columns[Constants.Collevel].Hidden = true;
    //ultraGrid1.DisplayLayout.Bands[0].Columns[Constants.ColID].Hidden = true;
    //ultraGrid1.DisplayLayout.Bands[0].Columns[Constants.Colparentid].Hidden = true;
    ultraGrid1.DisplayLayout.Bands[0].Columns["DependencyType"].Hidden = true;
    ultraGrid1.DisplayLayout.Bands[0].Columns["ListType"].Hidden = true;
    //ultraGrid1.DisplayLayout.Bands[0].Override.AllowColSizing = AllowColSizing.Synchronized;
    ultraGrid1.DisplayLayout.BorderStyle = UIElementBorderStyle.Default;


    //ultraGrid1.DisplayLayout.Bands[0].Columns[1].TabStop = false;
    ultraGrid1.DisplayLayout.Bands[0].Columns[1].CellAppearance.BackColor = Color.White;

    ultraGrid1.DisplayLayout.Bands[0].Columns["Value"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.DropDownList;
    ultraGrid1.DisplayLayout.Bands[0].Columns["Value"].ButtonDisplayStyle = Infragistics.Win.UltraWinGrid.ButtonDisplayStyle.Always;

    ultraGrid1.DisplayLayout.Bands[0].Columns["Value"].CellAppearance.BackColor = Color.White;

    ultraGrid1.DisplayLayout.Override.SupportDataErrorInfo = SupportDataErrorInfo.CellsOnly;
    ultraGrid1.DisplayLayout.Bands[0].Columns[1].SupportDataErrorInfo = DefaultableBoolean.True;

    ultraGrid1.DisplayLayout.Bands[0].Columns[0].Width = 200;
    ultraGrid1.DisplayLayout.Bands[0].Columns["Value"].Width = 120;
    ultraGrid1.DisplayLayout.Bands[0].Columns["Value"].TabIndex = 0;
    ultraGrid1.DisplayLayout.Bands[0].Columns["Unit"].Width = 60;

    for (int rowCount = 0; rowCount < ultraGrid1.Rows.Count; rowCount++)
    {
        UltraGridRow row = ultraGrid1.Rows[rowCount];
        if (string.IsNullOrEmpty(Convert.ToString(row.Cells[1].Value)))
        {
            row.Cells[1].Appearance.BackColor = Color.White;
        }
    }

    ultraGrid1.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
    ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.Solid;


    ultraGrid1.DisplayLayout.Override.GroupByRowSpacingAfter = 0;
    ultraGrid1.DisplayLayout.Override.GroupByRowSpacingBefore = 0;
    ultraGrid1.DisplayLayout.Override.HeaderPlacement = HeaderPlacement.OncePerGroupedRowIsland;

    if (ultraGrid1.DisplayLayout.Bands.Count > 1)
    {
        ultraGrid1.DisplayLayout.Bands[1].ColHeadersVisible = false;
        ultraGrid1.DisplayLayout.Bands[1].Columns[2].AutoSizeMode = ColumnAutoSizeMode.None;
        ultraGrid1.DisplayLayout.Bands[1].Columns[3].AutoSizeMode = ColumnAutoSizeMode.None;
        ultraGrid1.DisplayLayout.Bands[1].Columns[0].CellActivation = Activation.NoEdit;
        ultraGrid1.DisplayLayout.Bands[1].Columns[4].CellActivation = Activation.NoEdit;
        ultraGrid1.DisplayLayout.Bands[1].Columns[2].Hidden = true;
        ultraGrid1.DisplayLayout.Bands[1].Columns[3].Hidden = true;
        ultraGrid1.DisplayLayout.Bands[1].Columns["DependencyType"].Hidden = true;
        ultraGrid1.DisplayLayout.Bands[1].Columns["ListType"].Hidden = true;
        ultraGrid1.DisplayLayout.Bands[1].Columns[0].Width = 120;
        //ultraGrid1.DisplayLayout.Bands[1].Columns[0].TabStop = false;
        ultraGrid1.DisplayLayout.Bands[1].Columns["Value"].Width = 180;
        ultraGrid1.DisplayLayout.Bands[1].Columns["Value"].TabIndex = 0;
        ultraGrid1.DisplayLayout.Bands[1].Columns["Unit"].Width = 60;
        //ultraGrid1.DisplayLayout.Bands[1].Columns[Constants.ColUnit].TabStop = false;
        ultraGrid1.DisplayLayout.Override.RowSelectors = DefaultableBoolean.False;
        if (e.Layout.Bands[1].Columns.Exists(" ") == true)
        {
            ultraGrid1.DisplayLayout.Bands[1].Columns[" "].Width = 0;
        }
        if (e.Layout.Bands[1].Columns.Exists(" ") == false)
        {
            ultraGrid1.DisplayLayout.Bands[1].Columns.Add(" ");
            ultraGrid1.DisplayLayout.Bands[1].Columns[" "].Header.VisiblePosition = 0;
            ultraGrid1.DisplayLayout.Bands[1].Columns[" "].Width = 0;
        }
        if (ultraGrid1.DisplayLayout.Bands.Count > 2)
        {

            ultraGrid1.DisplayLayout.Bands[2].ColHeadersVisible = false;
            ultraGrid1.DisplayLayout.Bands[2].Columns[2].AutoSizeMode = ColumnAutoSizeMode.None;
            ultraGrid1.DisplayLayout.Bands[2].Columns[3].AutoSizeMode = ColumnAutoSizeMode.None;
            ultraGrid1.DisplayLayout.Bands[2].Columns[0].CellActivation = Activation.NoEdit;
            ultraGrid1.DisplayLayout.Bands[2].Columns[4].CellActivation = Activation.NoEdit;
            //ultraGrid1.DisplayLayout.Bands[2].Override.AllowColSizing = AllowColSizing.None;
            ultraGrid1.DisplayLayout.Bands[2].Columns[2].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[2].Columns[3].Hidden = true;

            ultraGrid1.DisplayLayout.Bands[2].Columns["DependencyType"].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[2].Columns["ListType"].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[2].Columns[0].Width = 200;
            ultraGrid1.DisplayLayout.Bands[2].Columns["Value"].Width = 120;
            ultraGrid1.DisplayLayout.Bands[2].Columns["Unit"].Width = 60;
            ultraGrid1.DisplayLayout.Override.RowSelectors = DefaultableBoolean.False;
            //ultraGrid1.DisplayLayout.Bands[2].Columns[0].TabStop = false;
            ultraGrid1.DisplayLayout.Bands[2].Columns["Value"].TabIndex = 0;
            //ultraGrid1.DisplayLayout.Bands[2].Columns[Constants.ColUnit].TabStop = false;
            ultraGrid1.DisplayLayout.Bands[2].Columns["Value"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.DropDownList;
            ultraGrid1.DisplayLayout.Bands[2].Columns["Value"].ButtonDisplayStyle = Infragistics.Win.UltraWinGrid.ButtonDisplayStyle.
            if (e.Layout.Bands[2].Columns.Exists(" ") == true)
            {
                ultraGrid1.DisplayLayout.Bands[2].Columns[" "].Width = 0;
            }
            if (e.Layout.Bands[2].Columns.Exists(" ") == false)
            {
                ultraGrid1.DisplayLayout.Bands[2].Columns.Add(" ");
                ultraGrid1.DisplayLayout.Bands[2].Columns[" "].Header.VisiblePosition = 0;
                ultraGrid1.DisplayLayout.Bands[2].Columns[" "].Width = 0;
            }
        }
    }
    e.Layout.Bands[0].Override.CellAppearance.BorderAlpha = Alpha.Transparent;
    e.Layout.Bands[0].Override.SelectedCellAppearance.ForeColor = Color.Black;
    e.Layout.Bands[0].Override.RowAppearance.BorderAlpha = Alpha.Transparent;
    e.Layout.Bands[0].Override.CellAppearance.BackColorAlpha = Alpha.Transparent;
    e.Layout.Bands[0].Columns[0].CellActivation = Activation.NoEdit;
    e.Layout.Bands[0].Columns[1].CellActivation = Activation.NoEdit;
    e.Layout.Bands[0].Columns[2].CellActivation = Activation.NoEdit;
    ultraGrid1.DisplayLayout.AutoFitStyle = AutoFitStyle.ResizeAllColumns;
    ultraGrid1.DisplayLayout.Bands[0].Override.RowSelectors = DefaultableBoolean.False;
    ultraGrid1.DisplayLayout.Appearance.BackColor = Color.White;
    //ultraGrid1.DisplayLayout.Override.AllowColSizing = AllowColSizing.None;
    //ultraGrid1.DisplayLayout.Override.AllowRowLayoutColMoving = GridBagLayoutAllowMoving.None;
    ultraGrid1.DisplayLayout.BorderStyle = UIElementBorderStyle.Solid;
    ultraGrid1.DisplayLayout.Bands[0].Columns[1].ButtonDisplayStyle = Infragistics.Win.UltraWinGrid.ButtonDisplayStyle.Always;
    ultraGrid1.DisplayLayout.TabNavigation = TabNavigation.NextCell;


    if (e.Layout.Bands[0].Columns.Exists(" ") == true)
    {
        ultraGrid1.DisplayLayout.Bands[0].Columns[" "].Width = 0;
        //ultraGrid1.DisplayLayout.Bands[0].Columns[" "].ColSpan = 3;
    }
    if (e.Layout.Bands[0].Columns.Exists(" ") == false)
    {
        ultraGrid1.DisplayLayout.Bands[0].Columns.Add(" ").DataType = typeof(bool);
        ultraGrid1.DisplayLayout.Bands[0].Columns[" "].Header.VisiblePosition = 0;
        ultraGrid1.DisplayLayout.Bands[0].Columns[" "].Width = 0;
        // ultraGrid1.DisplayLayout.Bands[0].Columns[" "].ColSpan = 3;
        ultraGrid1.DisplayLayout.Bands[0].Columns[" "].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox;
        UltraGridColumn checkBox = ultraGrid1.DisplayLayout.Bands[0].Columns[" "];
    }

    foreach (UltraGridBand band in ultraGrid1.DisplayLayout.Bands)
    {
        band.HeaderVisible = false;
    }
}

componentProperties collection may have N Level depending on values.

CompoentProperty 1
--------> SubProperty1
---------------->SubSubProperty1
---------------->SubSubProperty1
CompoentProperty 2
--------> SubProperty2
---------------->SubSubProperty2
---------------->SubSubProperty2
---------------------->SubSubProperty3
---------------------->SubSubProperty3
--------------------------->SubSubProperty NN

Problem:

Layout is not correct, there are lots of Banding after assigning DataSource to grid as ComponentProperties Class and Specified Column Size does not take any effect on it. Previously, i was using datatable as datasource that need to replace with object data source. Is there any settings require to work with object datasources.

Lost of band showing rather than just 3 bands if i have 3 level hierarchy

Was it helpful?

Solution

I got the some solution from Infragistics fourm, that some what solve the layout problem. As i inspected when i use IList then these settings work correct after setting the MaxBandDepth Property at the form load event.

// Load only upto two descendant bands. So even if the data source has more than 3 level 
// deep hierarchy, the UltraGrid will only make use of first two levels and ignore the 
// levels deeper than that.
    this.ultraGrid1.DisplayLayout.MaxBandDepth = 3;

The problem that was occured was similar as asked in below thread:
First Column of Wingrid Extending too large when datasource is IList

By default, the grid synchronizes the column widths of every band. So in a case like this where you have a recursive data source, there are essentially an infinite number of bands and for each band the grid indents a little bit. This means that the first column gets very big in order to accommodate the indentation all the way down the hierarchy. The grid limits you to 100 bands of depth by default, but that still means 100 level of indentation.

So there are a number of ways you can handle this.

Set MaxBandDepth on the grid to a smaller value. I recommend a value of between 5 and 8. This will give you pretty good performance on a decent machine and most users probably won't drill down more than 5 levels, anyway. You could set AllowColSizing to Free. This will stop the grid from synchronizing the column widths and allow each band's columns to be sized independently.

References:
MaxBandDepth Changing After Datasource Set
MaxBandDepth is not being used when the datasource is set
Ultragrid Hierarchical DataSource with Multiple Level Paths
UltraGrid hierarchy

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top