2011-08-12 5 views
1

나는 xtragrid control on my devxpress form을 가지고 있습니다. 나는 columns of my grid at runtime when i load the form을 만들었습니다. 나는 같은 폼에있는 그리드 뷰를위한 Field chooser를 개발 중이다. 이를 위해 repositoryItemCheckedComboBoxEdit 컨트롤 &을 사용하여 xtragrid에있는 열 이름을 추가했습니다.DevExpress XtraGridView 컨트롤의 문제점

기본적으로 Visible 속성을 false로 사용하여 xtragrid에 대한 열을 만들었습니다. 사용자가 repositoryItemCheckedComboBoxEdit을 사용하여 특정 열 이름을 검사하면 사용자가 열 이름을 선택 취소 한 다음 다시 false로 설정하면 Visible을 true로 설정합니다. & & 컬럼을 생성하는 동안 컬럼의 너비를 설정합니다. 다음과 같이 field chooser에 대한

public void AddGridColumn(string fieldName, string caption, int nRowWidth, RepositoryItem Item, object oCollection, string DisplayMember, string ValueMember, string format, FormatType type) 
     { 
      DevExpress.XtraGrid.Columns.GridColumn column = ColumnView.Columns.AddField(fieldName); 
      column.Caption = caption; 
      column.ColumnEdit = Item; 
      column.DisplayFormat.FormatType = type; 
      column.DisplayFormat.FormatString = format; 
      column.VisibleIndex = ColumnView.VisibleColumns.Count; 
      column.Width = nRowWidth; 
     } 

코드는 - -이 사용 다음과 같이 내가 런타임에 xtragridview에 열을 만드는 데 사용

Problem which i'm facing is that if user select the all fields from the repositoryItemCheckedComboBoxEdit then the grid control should show the horizontal scroll bar automatically when require.

And another problem is that with the columns is besides setting the width of the column, it is not showing the required width of that column . it shrinks that all column width .

코드는 repositoryItemCheckedComboBoxEdit 컨트롤의 항목을 채우는 함수

private void FieldCollection() 
    { 
     allFields = new ArrayList(); 
     columnNames = new Dictionary<string, string>(); 
     allFields.Clear(); 
     repositoryItemCheckedComboBoxEdit1.Items.Clear(); 
     for (int i = 0; i < gvBase.Columns.Count; i++) 
     { 
      allFields.Add(gvBase.Columns[i].Caption); 
      if (gvBase.Columns[i].FieldName != "ContactID") 
      { 
       if (gvBase.Columns[i].Visible == true) 
       { 
        if (gvBase.Columns[i].Caption != "Label1" && gvBase.Columns[i].Caption != "Label2" && gvBase.Columns[i].Caption != "Label3" && gvBase.Columns[i].Caption != "Label4" && gvBase.Columns[i].Caption != "Label5") 
         repositoryItemCheckedComboBoxEdit1.Items.Add(gvBase.Columns[i].Caption, CheckState.Checked); 
        if (!columnNames.ContainsKey(gvBase.Columns[i].Caption)) 
         columnNames.Add(gvBase.Columns[i].Caption, gvBase.Columns[i].FieldName); 
       } 
       else 
       { 
        if (gvBase.Columns[i].Caption != "Label1" && gvBase.Columns[i].Caption != "Label2" && gvBase.Columns[i].Caption != "Label3" && gvBase.Columns[i].Caption != "Label4" && gvBase.Columns[i].Caption != "Label5") 

         repositoryItemCheckedComboBoxEdit1.Items.Add(gvBase.Columns[i].Caption, CheckState.Unchecked); 
        if (!columnNames.ContainsKey(gvBase.Columns[i].FieldName)) 
         columnNames.Add(gvBase.Columns[i].Caption, gvBase.Columns[i].FieldName); 

       } 
      } 
     } 
     cmbFieldChooser.EditValue = ""; 
    } 
은 repositoryItemCheckedComboBoxEdit 제어 이벤트에 사용됩니다 -

private void cmbFieldChooser_EditValueChanged(object sender, EventArgs e) 
     { 
      ArrayList temp = new ArrayList(); 
      temp.AddRange(allFields); 

      string[] strFields = cmbFieldChooser.EditValue.ToString().Split(','); 
      for (int i = 0; i < strFields.Length; i++) 
      { 
       if (temp.Contains(strFields[i].Trim())) 
        temp.Remove(strFields[i].Trim()); 
       if (strFields[i] != "") 
       { 
        if (columnNames.ContainsKey(strFields[i].Trim())) 
        { 
         if (gvBase.Columns[columnNames[strFields[i].Trim()]].Visible == false) 
         { 
          gvBase.Columns[columnNames[strFields[i].Trim()]].Visible = true; 
          gvBase.Columns[columnNames[strFields[i].Trim()]].BestFit(); 

         } 
        } 
       } 
      } 
      if (temp.Count < 20) 
      { 
       for (int j = 0; j < temp.Count; j++) 
       { 
        if (columnNames.ContainsKey(temp[j].ToString().Trim())) 
        { 
         gvBase.Columns[columnNames[temp[j].ToString().Trim()]].Visible = false; 
        } 
       } 
      } 
      cmbFieldChooser.EditValue = repositoryItemCheckedComboBoxEdit1.GetCheckedItems(); 
      if ((cmbFieldChooser.EditValue.ToString()).Split(',').Length > 5) 
      { 
       gvBase.OptionsView.ColumnAutoWidth = false; 
       gvBase.BestFitColumns(); 
       gvBase.HorzScrollVisibility = ScrollVisibility.Always; 
      } 
      else 
      { 
       gvBase.OptionsView.ColumnAutoWidth = true; 
       gvBase.HorzScrollVisibility = ScrollVisibility.Never; 
      } 

     } 

어떻게이 문제를 해결하려면?

감사합니다.

+0

@ Priyanka : 아마도이 질문을 검색하거나 게시하는 경우 해결책을 찾을 수 있습니다 (http://www.devexpress.com/Support/Center/). – CharithJ

답변

0

그리드에 몇 개의 컬럼이 있습니까?

5 열 (예 : 6 열 이상)이 지나면 ColumnAutoWidth를 해제하는 코드가 있습니다. ColumnAutoWidth가 실제로 꺼져 있는지 확인하기 위해이 조건을 디버깅 했습니까?

BestFitColumns Help Doc에 따르면 BestFitColumns는 -1로 설정하지 않는 한 BestFitMaxRowCount 속성 당 첫 번째 n 행만 계산합니다. 원인 일 수 있습니까?

cmdFieldChooser_EditValueChanged 이벤트 내에서 cmdFieldChooser의 EditValue를 설정하는 경우 약간 이상하게 보일 수있는 다른 이유는 무엇입니까?