ComboBox.SelectedValue портится после привязки к списку - PullRequest
0 голосов
/ 22 июля 2010

Я теряю свои чувства здесь ...

У меня есть ComboBox в форме с одним измененным свойством, Sorted = true.

Это свойство портится с SelectedValue, и я хотел бычтобы понять почему.

взгляните на код (вы можете вставить его в новый проект WinForms, и он будет работать после добавления комбинированного списка):

    private void Form1_Load(object sender, EventArgs e)
    {
        List<ColumnFilter> ColumnFilters = new List<ColumnFilter>();
        ColumnFilters.Add(new ColumnFilter("Ope_OpeID", "Ope_OpeID", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("Ope_Kod", "Ope_Kod", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("Ope_Imie", "Ope_Imie", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("Ope_Nazwisko", "Ope_Nazwisko", ColumnFilterType.DataGridViewHidden));

        comboBox1.DataSource = ColumnFilters;
        comboBox1.DisplayMember = "Description";
        comboBox1.ValueMember = "Expression";
    }

    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        MessageBox.Show(comboBox1.SelectedValue.ToString());
    }
}
public enum ColumnFilterType
{
    DataGridView = 1,
    DataGridViewHidden = 2,
    DataTable = 3
}

public struct ColumnFilter
{
    private string description;
    private string expression;
    public string Description
    {
        get { return description; }
        set { description = value; }
    }
    public string Expression
    {
        get { return expression; }
        set { expression = value; }
    }
    public readonly ColumnFilterType Type;
    public ColumnFilter(string description, string expression, ColumnFilterType type)
    {
        this.description = description;
        this.expression = expression;
        this.Type = type;
    }
    public override string ToString()
    {
        return description;
    }
}

Как видите, явручную добавить 4 структуры в список и в событии SelectionChangeCommited я хочу отобразить текущее значение выбранной структуры.

Поэтому, когда я выбираю Ope_OpeID, я хочу видеть значение Ope_OpeID, когда я выбираю Ope_Imie, я хочу видеть значениеOpe_Imie.Другими словами, значение должно быть равно отображаемому тексту.

Проблема в том, что когда я, например, выбираю Ope_Imie, тогда значение равно Ope_OpeID!Когда я выбираю Ope_OpeID, значение Ope_Nazwisko.Я понятия не имею, почему это работает таким образом.

«Забавно» (не так смешно после двух часов потраченной жизни ...), когда я добавляю в список другой набор предметов:

        ColumnFilters.Add(new ColumnFilter("1Ope_OpeID", "1Ope_OpeID", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("2Ope_Kod", "2Ope_Kod", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("3Ope_Imie", "3Ope_Imie", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("4Ope_Nazwisko", "4Ope_Nazwisko", ColumnFilterType.DataGridViewHidden));

Работает как положено.Итак, что-то не так с сортировкой, сортировка происходит только по первому символу ???

Спасибо за ваше время.

1 Ответ

1 голос
/ 22 июля 2010

Сортированное свойство не работает в комбинированном ящике с привязкой к данным.См. Раздел «Примечания» здесь .

Один из вариантов - заставить ColumnFilter реализовать IComparable, а затем напрямую отсортировать список <>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...