DevExpress XtraGridView控件的问题

本文关键字:问题 控件 XtraGridView DevExpress | 更新日期: 2023-09-27 18:05:26

我有一个xtragrid control on my devxpress form。我创造了columns of my grid at runtime when i load the form。我正在为我的网格视图开发字段选择器,它位于同一窗体上。为此,我使用了repositoryItemCheckedComboBoxEdit控制&在该控件中,我添加了将出现在xtragrid中的列名。

基本上,我创建了xtragrid的列,并将Visible属性设置为false。当用户使用repositoryItemCheckedComboBoxEdit检查特定的列名时,它将Visible设置为true &同样,如果用户未选中列名,那么我再次将可见设置为false。,在创建列时,我设置了列的宽度。

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 .

我用来在运行时创建列到xtragridview的

代码如下-

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

代码如下-我使用这个函数来填充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;
            }
        }

如何解决这个问题?

谢谢。

DevExpress XtraGridView控件的问题

您的网格中有多少列?

我看到你有代码在那里关闭ColumnAutoWidth一旦你过去5列(即6列或更多)。您是否调试了此条件以确保确实关闭了ColumnAutoWidth ?

根据BestFitColumns帮助文档BestFitColumns将只计算前n行按照BestFitMaxRowCount属性,除非它设置为-1,这可能是一个原因吗?

另一件事,似乎有点奇怪,如果你正在cmdfieldchooser_editvaluechange事件中设置cmdFieldChooser的EditValue…为什么如此?