2011-08-12 6 views
1

私にはxtragrid control on my devxpress formが1つあります。私はcolumns of my grid at runtime when i load the formを作成しました。同じフォームに配置されているグリッドビューのフィールドチューザーを開発しています。そのために、コントロールのrepositoryItemCheckedComboBoxEditコントロール&を使用しました。私はxtragridに存在する列名を追加しました。DevExpress XtraGridViewコントロールの問題

基本的には、Visibleプロパティをfalseに設定してxtragridの列を作成しました。ユーザーがrepositoryItemCheckedComboBoxEditを使用して特定の列名をチェックすると、ユーザーが列名のチェックを外してから再びfalseに設定すると、Visibleがtrueに設定されます。& &カラムiを作成すると、カラムの幅が設定されます。次のように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; 
     } 

コードは - - 私はこれを使用 次のようにiは、実行時に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:おそらく、あなたがこの質問を検索または投稿した場合の解決策を、devExpressフォーラムhttp://www.devexpress.com/Support/Center/で見つけることができます – CharithJ

答えて

0

グリッドにはいくつの列がありますか?

5つの列(つまり6列以上)を通過すると、ColumnAutoWidthをオフにするコードがあります。 ColumnAutoWidthが確実にオフになっていることを確認するためにこの状態をデバッグしましたか?

BestFitColumns Help Docごとに、BestFitColumnsは-1に設定しない限り、BestFitMaxRowCountプロパティごとに最初のn行だけを計算します。

cmdFieldChooser_EditValueChangedイベント内でcmdFieldChooserのEditValueを設定している場合はもう少し違って見えます...なぜそうですか?

関連する問題