Изменить выбранное значение в поле со списком до его отображения - PullRequest
2 голосов
/ 02 ноября 2010

Проблема странная, у меня есть поле со списком, который правильно заполнен элементами через свойства DataSource (он привязывается к элементу bindingSource, который содержит элемент отображения и значение), это простой список, который позволяет мне выбирать поставщиков выбирая между их именами, а не их идентификаторами. Проблема в том, что когда я изменяю SelectedValue, потому что я хочу установить опцию в качестве значения по умолчанию, я обнаружил, что свойство List пусто (я унаследовал класс combobox в другом), однако, когда показывается комбинированный ящик, у меня есть элементы внутри него , поэтому, возможно, проблема связана с тем, КОГДА данные действительно загружаются из источника данных (может быть, они загружаются только после их отображения?). Когда я должен изменить свое SelectedValue так, чтобы в элементе управления не отображалось событие «Показано»

Спасибо за любые предложения

Обновление 1: Я проверил по-вашему, но дело не в этом (ключ длинный, но даже если я приведу его, он не работает), на самом деле интересно то, что у меня есть сеттер, который позволяет мне устанавливать SelectedValue, даже если не делает Не добавляя исключений, в следующем MessageBox Items.Count дает мне 0 в качестве значения, что очень странно, потому что когда в форме отображается комбинированный список, он имеет все значения, которые я хотел. Вот код для моего сеттера:

    public object InputValue
    {
        get
        {
            return SelectedValue;
        }
        set
        { 
            SelectedValue = ((long)value);
            MessageBox.Show(this.Items.Count.ToString());
        }
    }

Ответы [ 3 ]

1 голос
/ 28 ноября 2010

Я решил проблему, фактически, поскольку я думал, что коллекция Items заполняется "вокруг" первой недействительной строки со списком, поэтому я просто сохранил значение, переданное как SelectedValue, до первой аннулирования во временной переменной, а затем просто установилэто под недействительным событием.

1 голос
/ 02 ноября 2010

Вы не единственный, кто столкнулся с этой проблемой, приятно слышать, что это не только я.Что не происходит, так это что-то, что связано с преобразованием типов - если вы явно приведете свой SelectedValue к типу точный в источнике данных, вы обнаружите, что можете успешно установить значение.

Например:

comboBox1.ValueMember = "Value";
comboBox1.DisplayMember = "Key";
object ds = new KeyValuePair<string, long>[] {
    new KeyValuePair<string,long>("a",0),
    new KeyValuePair<string,long>("b",1),
    new KeyValuePair<string,long>("c",2),
    new KeyValuePair<string,long>("d",3),
    new KeyValuePair<string,long>("e",4)
};
comboBox1.DataSource = ds;
comboBox1.SelectedValue = 3;        // this won't work
comboBox1.SelectedValue = (long)3;  // this will work

По любой причине, даже если «3» в качестве длинного равно «3» в виде целого, ComboBox отказывается играть в мяч, если вы нетип точно правильный.

Я могу предположить, что это как-то связано с тем фактом, что WinForms ComboBox является оболочкой для версии COM, и после создания собственного элемента управления проявляется другое поведение.

Надеюсь, это поможет с вашей конкретной проблемой!

0 голосов
/ 24 августа 2018

У меня есть эта проблема, и я использую свойство BindingSource.Current с событием CurrentChanged () источника привязки, и оно работает правильно

...