Показать список содержимого конкретного поля в ComboBox (C #) - PullRequest
1 голос
/ 30 августа 2009

Ну, мой вопрос немного глуп, но я пробовал много разных вещей безрезультатно.

В основной форме у меня есть ComboBox, и я хочу указать его источник данных на общедоступный список ListChanges только для чтения, объявленный в классе Filters. Нет проблем с этим, но я хочу перечислить поле Описание.

Я попытался присвоить строку «Описание» атрибуту DisplayMember безуспешно. Мой ComboBox только перечисляет: «BusinessLogic.PriceChange» для каждой записи, где BusinessLogic - это имя моего пространства имен, а PriceChange - класс.

Я ценю любую помощь.

Привет

Это часть кода моей основной формы

    public mainFrm()
    {
        InitializeComponent();

        prodFilter = new Filters();
        cbPriceChanges.DataSource = prodFilter.PriceChanges;
        cbPriceChanges.DisplayMember = "Description"
    }

Это часть кода, который объявляет объект List

public enum PriceChangeTypes
{
    No_Change,
    Increased,
    Decreased,
    All
}

public class PriceChange
{
    public String Description;
    public readonly PriceChangeTypes Type;

    public delegate bool ComparisonFuntionDelegate(Decimal a);
    public readonly ComparisonFuntionDelegate ComparisonFunction;

    public PriceChange(String Description, PriceChangeTypes type , ComparisonFuntionDelegate CompFunc)
    {
        this.Description = Description;
        Type = type;
        ComparisonFunction = CompFunc;
    }
}

public class Filters
{

    public readonly List<PriceChange> PriceChanges = null;

    public Filters()
    {
        PriceChanges = new List<PriceChange>();

        PriceChanges.Add(new PriceChange("No Change", PriceChangeTypes.No_Change, PriceChange => PriceChange == 0));
        PriceChanges.Add(new PriceChange("Increased", PriceChangeTypes.Increased, PriceChange => PriceChange > 0));
        PriceChanges.Add(new PriceChange("Decreased", PriceChangeTypes.Decreased, PriceChange => PriceChange < 0));
        PriceChanges.Add(new PriceChange("All", PriceChangeTypes.All, a => true));
    }
}

Ответы [ 2 ]

1 голос
/ 30 августа 2009

Вы пытались сделать "Описание" собственностью? Он сильно изменится, если список попытается получить поле путем отражения (как это, скорее всего, и происходит).

public class PriceChange {
    public string Description{
        get;
        set;
    }
    // ...
}
0 голосов
/ 30 августа 2009

Попробуйте добавить это в свой класс:

public override string ToString()
        {
            return Description;
        }

В настоящее время вы просто получаете значение по умолчанию ToString, которое является пространством имен объекта и классом

...