Как выбрать значение в комбинированном списке данных? - PullRequest
4 голосов
/ 17 марта 2011

У меня есть ComboBox, привязанный к DataView, который занял заполненный DataTable. Это DataTable имеет три столбца. Прежде чем DataView будет привязан к ComboBox, я добавлю еще один столбец и установлю некоторые значения.

   Dim table As DataTable = _retrieve.GetAllVersionsTable()
    table.Columns.Add("FirstRow", GetType(Boolean))

    Dim row As DataRow = table.NewRow()
    row("ID") = -1
    row("SomeValue") = -1
    row("SomeText") = "N/A"
    row("FirstRow") = True 'Fort sorting...

    Dim view As DataView = New DataView(table)
    view.Sort = "FirstRow DESC, SomeText DESC"

    table.Rows.InsertAt(row, 0)

    comboBox.DataSource = view
    comboBox.ValueMember = "ID"
    comboBox.DisplayMember = "SomeText"

Позже я извлекаю те же данные и создаю новый DataTable и связываю его с DataGridView в другой форме. Из этой формы я установил значение для столбца идентификаторов из выбранной строки в DataGridView.

Когда я возвращаюсь к первой форме, с помощью ComboBox я хочу выбрать строку ComboBox, которая имеет то же значение, которое я установил во второй форме, привязанную к ее свойству ValueMember. Я думал, что SelectedValue будет работать для этого, но это не так. Что еще я могу сделать?

comboBox.SelectedValue = myIdentityValue

Поскольку строки разные, я тоже не могу использовать SelectedItem. Есть ли способ, которым я могу выбрать соответствующую строку без необходимости циклически перебирать все существующие строки?

Ответы [ 4 ]

2 голосов
/ 17 марта 2011

Согласно MSDN:

SelectedValue: Получает или задает значение свойства элемента, указанного в свойстве ValueMember.

Таким образом, в соответствии с документацией, выполните что-то вродеэто должно работать, предполагая, что 123 - это идентификатор, присутствующий в выпадающем списке, потому что ID был установлен как ValueMember:

comboBox.SelectedValue = 123

Если вы не можете заставить его работать (возможно, связывание с DataView не работаетхорошо?), тогда вы можете использовать SelectedIndex, который всегда работает.

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

Используйте Combobox.text="".Он автоматически изменит значение выбранного значения на введенный вами текст.

0 голосов
/ 23 октября 2013

Эту проблему можно решить, установив Ничего Источник данных свойства, прежде чем установить источник данных:

Combobox.datasource=nothing
Combobox.DisplayMember="Data";
Combobox.ValueMember="ID";
Combobox.datasource = NewDataTable;
Combobox.SelectedValue = 4;
0 голосов
/ 18 октября 2011

Для любого, кто сталкивается с этой темой, имеет такие же проблемы, как Zolom или я. Я думаю, что нашел важную вещь, которая не задокументирована:

Вы должны передать тот же тип данных .SelectedValue. Если нет, поиск не удастся без подсказки.

Допустим, вы заполнили свой DataSource базой данных и в качестве поля значения допустим, например, integer, вам нужно передать целое число в SelectedIndex. Если это строка, вы передаете строку.

Надеюсь, это поможет ...

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