chinu1d Ответов: 3

Как выбрать конкретный элемент из combobox с помощью кодирования


Я хочу выбрать конкретный элемент из combobox, содержащего "n" элементов, чтобы я мог отобразить этот элемент в combobox во время работы формы.
примечание: Я сохранил " n " элементов в массиве, а затем добавил их в combobox с помощью источника данных
любить :
comboBox1.DataSource = array1;


пример кода:
 string[] array2 = new string[3] { "10:00", "16:00", "22:00" };
            string[] array1 = new string[3] { "8:30", "13:30", "19:00" };
            if (no == 1 || no == 3)
            {
                comboBox1.DataSource = array1;
            }
            if (no == 2 || no == 4)
            {
                comboBox1.DataSource = array2;
            }
            if (visit == 1 && j != -1)//here is the problem it
            {
                comboBox1.SelectedIndex = j;
            }
//j has a value say 1, so it should display 13:30 for 'no'=1 or 3
but it dosent


Что я уже пробовал:

я пробовал selectedindex, selectedvalue, selectedtext, selecteditem, но ничего не работает, он всегда отображает индекс 0 элемента (то есть первый элемент).
Также он не выдает ошибку но и не переключатель, который будет отображаться в выпадающем списке всегда первый элемент

Richard MacCutchan

Ничего не работает? Что это значит? Пожалуйста, покажите свой код, чтобы люди могли вам помочь, мы не можем догадаться, что вы делаете.

[no name]

И пока мы находимся в этом, "C#" на самом деле не говорит нам, о каком контроле мы говорим. WinForms? WPF? Сильверлайт? АСП .Чистая?

Richard MacCutchan

Я не думаю, что вы хотели задать мне этот вопрос.

[no name]

Во всяком случае, не важно. Как я вижу, у многих психологов уже есть письменные ответы. :-)

И я должен привыкнуть искать невидимую кнопку "ответить" вместо того, чтобы использовать Первое, что я вижу :-)

chinu1d

string[] array2 = новая строка[3] { "10:00", "16:00", "22:00" };
string[] array1 = новая строка[3] { "8:30", "13:30", "19:00" };
если (нет == 1 | / Нет = = 3)
{
comboBox1. DataSource = array1;
}
если (нет = = 2 | / нет = = 4)
{
comboBox1. DataSource = array2;
}
if (visit == 1 & & amp; j != -1) / / вот в чем проблема
{
comboBox1. SelectedIndex = j;
}
//j имеет значение, скажем, 1, поэтому он должен отображать 13: 30 для 'no'=1 или 3
но она доцент

Richard MacCutchan

Я только что попробовал этот код, и он отлично работает. В чем заключается ценность visit?

3 Ответов

Рейтинг:
2

lekhasreekrishna@gmail.com

if the items in your ComboBox are strings, you can try:
comboBox1.SelectedItem = "test1";

If the above is not working then try with following method
 
public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}
Then just consume the method:

ddl.SelectItemByValue(value);


Рейтинг:
2

RickZeeland

Может быть, вам нужно что-то вроде:

comboBox1.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", bsCustomers, "id", true));
См. этот вопрос: в C# - установить элемент на ComboBox привязан к источнику данных - переполнения стека[^]
Кроме того, может возникнуть проблема с каким-то свойством, которое вы изменили в Конструктор форм, просто попробуйте свой код со свежей формой и ComboBox со свойствами по умолчанию.


Рейтинг:
2

OriginalGriff

Работать на меня:

public class MyObject
    {
    public string Text { get; set; }
    public int Value { get; set; }
    }
private void MyButton_Click(object sender, EventArgs e)
    {
    MyObject[] data = new MyObject[] {new MyObject(){Text = "abc", Value = 1},
                                      new MyObject(){Text = "def", Value = 2},
                                      new MyObject(){Text = "ghi", Value = 3}};
    myComboBox.DataSource = data;
    myComboBox.ValueMember = "Value";
    myComboBox.SelectedValue = 2;

Или
myComboBox.SelectedItem  = data[1];

Или
myCOmboBox.SelectedText  = "abc";

Так что же я делаю такого, что отличается от тебя?


[no name]

-- Так что же я делаю такого, что отличается от тебя?

Он использует жереха .Чистый MVP. Просто шучу, но откуда вы все знаете, о каком UI он на самом деле говорит?

OriginalGriff

Я не. Но это отправная точка для него, чтобы понять, что это где-то работает... :смеяться:

Мое личное предположение заключается в том, что у него есть массив строк, который не будет работать в качестве источника данных (поскольку у них есть только свойство длины) - хотя я могу ошибаться.

chinu1d

Но я уже пробовал это дозент кажется работает,
может быть, я попробую еще раз

OriginalGriff

Что мы делаем такого, что отличается?

chinu1d

смотрите мой код

OriginalGriff

Что, по словам отладчика, происходит, когда вы проходите через код?

chinu1d

ничего, он работает плавно, но просто продолжает отображать первый элемент в combobox.