Проблема с элементом управления DevExpress XtraGridView - PullRequest
1 голос
/ 12 августа 2011

У меня есть один 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;
            }

        }

Какрешить эту проблему?

спасибо.

1 Ответ

0 голосов
/ 18 августа 2011

Сколько столбцов у вас в сетке?

Я вижу, что у вас есть код для отключения ColumnAutoWidth после того, как вы пройдете 5 столбцов (то есть 6 столбцов или более). Вы отладили это условие, чтобы убедиться, что ColumnAutoWidth действительно отключен?

В соответствии с Справочным документом BestFitColumns BestFitColumns будет рассчитывать только для первых n строк согласно свойству BestFitMaxRowCount, если оно не установлено в -1, может ли это быть причиной?

Другая вещь, которая кажется немного странной, если вы устанавливаете EditValue cmdFieldChooser в событии cmdFieldChooser_EditValueChanged ... почему так?

...