2013-07-08 5 views
0

나는 다음과 같습니다 개체가 :사용자 정의 그리드 모양 설정을 사용하여 UltraWinGrid로 계층 적 데이터를 표시 하시겠습니까?

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; } 
} 

내가 출력이는 바인딩의 다음과 같은 형태로 동안 빌드 정보를 가지고 :

public class ComponentPropertyList: BindingList<ComponentProperty> 
{ 

} 

시나리오 : 구성 요소의

목록 Properties Infragistics Ultra WinGrid에 바인딩하여 Master- Detail View를 생성하고 Grid에서 다음 사용자 정의를 수행했습니다. 설정 :

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 컬렉션은 값에 따라 N 레벨을 가질 수 있습니다.

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

문제점 :

레이아웃이 정확하지 격자에 DataSource을 할당 한 후 ComponentProperties 클래스 및 지정 Column Size으로 많은 밴딩이 발생해도 아무런 효과가 없습니다. 이전에는 객체 데이터 소스로 대체해야하는 datasource로 datatable을 사용하고있었습니다. 객체 데이터 소스로 작업해야하는 설정이 있습니까?

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

+0

당신이 계신 분명하지 않다. ComponentProperty를 첫 번째 밴드 ('마스터')로, 평평한 계층을 두 번째 밴드로 사용 하시겠습니까? 아니면 레벨을 유지 하시겠습니까? – kristianp

답변

3

내가의를 Infragistics의의 사m에서 몇 가지 솔루션을 가지고 그 레이아웃 문제를 해결할 것을 몇 가지. 내가 IList을 사용할 때 검사 할 때 양식로드 이벤트에서 MaxBandDepth Property을 설정 한 후에 이러한 설정이 올바르게 작동합니다.

// 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; 

유사한 스레드 아래의 질문을 받았다 발생 된 문제 : 기본적으로
First Column of Wingrid Extending too large when datasource is IList

는 그리드는 모든 밴드의 열 너비를 동기화합니다. 그래서 이 경우 당신은 재귀적인 데이터 소스를 가지고 있습니다. 은 본질적으로 무한한 수의 밴드이고 각 밴드는 그리드 들여 쓰기가 약간 있습니다. 이것은 첫 번째 열이 계단 아래로 들여 쓰기를 수용하기 위해 매우 큰 이된다는 것을 의미합니다. 그리드는 기본적으로 깊이 100 밴드로 제한하며 이지만 100 수준의 들여 쓰기를 의미합니다.

이렇게 처리 할 수있는 방법에는 여러 가지가 있습니다.

그리드의 MaxBandDepth를 더 작은 값으로 설정하십시오. 나는 을 5와 8 사이로 추천한다. 이것은 괜찮은 컴퓨터에서 꽤 좋은 성능을 제공 할 것이고, 대부분의 사용자는 아마 5 레벨을 초과하여 드릴 다운하지 않을 것이다. AllowColSizing을 Free로 설정할 수 있습니다. 이렇게하면 격자에서 열 너비를 동기화하지 않고 각 밴드의 열을 독립적으로 크기 조정할 수 있습니다.

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