Ustawienie comboboxa na pustą wartość

0

Witam

Mam następujący problem. Mam trzy combobox-y. Trzeci jest ukryty. Drugi jest wywoływany przez zdarzenie SelectedIndexChanged pierwszego. Chciałbym, aby w przy starcie programu oba nie wyświetlały zawartości, dopiero o rozwinięciu listy i wybraniu pozycji. Jest mi to potrzebne to to, aby po wybraniu pozycji "abcd", która niestety w moim przypadku jest pierwsza na liście drugiego comboboxa (wyświetlanie alfabetyczne) zmieniło mi rozmiar comboboxa i włączyło oraz uzupełniło trzeciego comboboxa. ComboBox1 uzupełniam z bazy za pomocą następującego kodu:

            MySqlConnection polaczenie = new MySqlConnection(konfiguracja);
            MySqlCommand zapytanie = new MySqlCommand("CALL uzupelnijCombo1(" + wszystkie + ");", polaczenie);

            try
            {
                MySqlDataAdapter wynik = new MySqlDataAdapter();
                wynik.SelectCommand = zapytanie;
                DataTable tabela = new DataTable();
                wynik.Fill(tabela);

                comboBox.DisplayMember = "nazwa";
                comboBox.ValueMember = "id";
                comboBox.DataSource = tabela;

                //**comboBox.SelectedIndex = -1; // Błąd,**
            }
            catch (Exception komunikat)
            {
                MessageBox.Show(komunikat.Message);
            }

            polaczenie.Close();

Combo1 jest uzupełnianie po kliknięciu w wybraniu wiersza w datagridview, ale próbowałem również przy ładowaniu formy. Przy starcie programu lista comboboxa1 wypełnia się automatycznie, jednocześnie wczytując combobox2 i ustawiając mu indeks pozycji na pozycję abcd, zmieniając mi szerokość combo1, ustawiając pustą pozycję pustą combo2, a ja chciałbym aby dane były w listach, a nie wyświetlały się od razu i przede wszystkim nie zmieniały mi rozmiaru combo2 i włączały combo3, dopiero po wybraniu przeze mnie w combo2 pozycji abcd.

Kod drugiego combo jest identyczny, z tym że **comboBox.SelectedIndex = -1; ** nie powoduje błędu, a program po uruchomieniu uzupełnia combo, ale pozycje są widoczne dopiero po otwarciu listy. Jeżeli w combo1 odkomentuję linię to dostaje komunikat "Incorrect integer value: " for column 'id' at row 1"

0

Czytałem kilka razy i tak nie za bardzo wiem o co chodzi, jedynie co przychodzi mi do głowy to jeśli chcesz żeby były wyświetlane w listach ustaw właściwość:

comboBox.DropDownStyle=ComboBoxStyle.DropDownList;
0

comboBox.Items.InsertAt(0, "Wybierz opcję") :)

Dajesz to na końcu, po wypełnieniu go danymi.

0

Nie programuje w c#. Programuję w "czystym" API.
Ale może pomogę Ci koncepcyjnie.
Jeśli masz zdarzenie SelectedIndexChanged pierwszego, to prawdopodobnie odczytujesz w nim (w tym zdarzeniu) index z pierwszego combo i coś z nim dalej robisz.
Prawdopodobnie comboBox.SelectedIndex = -1; wywołuje to zdarzenie i w nim jest odczytywane -1. Nie widzę całego kodu, ale może tam nie zabezpieczyłeś się przed tym?

0

Ja czyszczę comboboxy w ten sposób comboBox1.SelectedItem = null;

0

Nie wiem, co masz na myśli z tym czyszczeniem.
Moja sugestia jest taka, że wiersz
comboBox.SelectedIndex = -1;
powoduje wywołanie zdarzenia, które jest odbierane przez procedurę przypisaną temu zdarzeniu.
Podejrzewam błąd w tej procedurze, ale mogę się tylko domyślać (bo przecież nie pokazałeś jej).

1 użytkowników online, w tym zalogowanych: 0, gości: 1