2012-05-03 9 views
7

Próbuję odznacz (wyczyść) wiele kombinacji pól w mojej aplikacji formularzy systemu Windows. W mojej aplikacji mam metodę Reset, która ustawia SelectedIndex dla każdego combo na -1. Wszystkie moje pola kombi są danymi, tzn. Każda lista kombi jest zapełniana przy użyciu źródła danych.Jak odświeżyć/odłożyć databound ComboBox? SelectedIndex = -1 nie działa

Zauważyłem, że czasami działa moja metoda resetowania, tzn. Odznacza ona aktualnie wybrany element i wyłącza combo. Jednak innym razem wybiera pierwszy element (SelectedIndex = 0) bezpośrednio po próbie ustawienia go na -1. Z punktu widzenia użytkowników wygląda to jak błąd, ponieważ nie zawsze "usuwa" formularz.

Zgodnie z MSDN:

„Aby usunąć zaznaczenie aktualnie wybranego elementu, należy ustawić SelectedIndex na -1 Nie można ustawić selectedIndex elementu ComboBox do -1, jeśli pozycja jest pozycja danych związany.”.

Czy ktoś wie o pracy?

Dziękujemy

+0

Jest to stary wątek, ale odkąd próbowałem to rozgryźć i znalazłem to, dodam to tutaj. To zachowanie jest błędem według MS: https://support.microsoft.com/en-us/help/327244/bug-combobox-does-not-clear-when-you-set-selectedindex-to--1 – CuppM

Odpowiedz

-3

można spróbować skorzystać z tego rozwiązania ..

dataGrid.DataSource = Nothing 

dataGrid.DataBind() 

nadzieję swoją pomoc ..: D

+0

siatka danych ?? masz na myśli ComboBox? – Habib

+0

Jest to wyraźnie oznaczone jako C#, a nie VB. Ponadto, powiedział ComboBox, a nie DataGrid. – KidCode

+0

dataGrid.DataSource = null dataGrid.DataBind() –

2

Można spróbować ustawić wybraną wartość lub produkt do null (Nothing w VB)

Nie mogę zapamiętać zachowania rzucania wyjątku. Jednak pamiętam, że wstawiałem wartość o nazwie -1, (None) do combo-boxa po tym, jak był on databoundowany zwykle przez zdarzenia databind. Zalecam pobranie danych na liście i wstawienie nowej wartości do tej listy. Powiąż teraz combo z Listą.

+0

'SelectedItem', yes. Jeśli jednak ustawisz wartość 'SelectedValue' na wartość null (a ComboBox jest powiązany z danymi), spowoduje to zgłoszenie wyjątku. –

+1

Poza tym nie warto łączyć z danymi na żywo. Zawsze pobieraj dane z lokalnej listy i łącz z Listą. Mam nadzieję, że używasz LINQ. – DoomerDGR8

+0

Ustawiając wartość SelectedValue wyrzuciłem wyjątek, SelectedIndex = null pracował, jednak na konkretnym combobox (drop down) musiałem zrobić to dwa razy, co jest raczej dziwne. Nie jestem pewien, dlaczego?Również nie używam LINQ, mój projekt musi być .net 2 – bobbo

-1

Dodaj do combobox jeden pusty element, coś takiego:

cb.Items.Add(""); 

Po tym można odznaczyć swoje combobox wybierając pozycję ostatni CB:

cb.SelectedIndex = cb.Items.Count - 1; 

Nie pójdziesz!

Będziesz miał ostatnie miejsce puste w swoim comboboxie, ale to ci nie przeszkadza. czy to będzie? :-)

0

Jeśli struktura docelowa wynosi 4,0 - oto rozwiązanie:

zainstalować .Net Framework 4.5 (nie zmieniają ramy docelowej projektu, wystarczy zainstalować ramy). Po zainstalowaniu, że linia odznacza z danymi combobox:

combobox.SelectedValue = 0; 

Mój członek wartość to „id” int podstawowego klucza automatycznego, tak że pole nie zawiera wartość 0. jednak, że nie będzie działać w systemie Windows wersje, które nie obsługują .net45

0

Spróbuj ustawić [ComboBoxObj]. SelectedIndex = -1; co spowoduje, że będzie pusta. -1 oznacza zaznaczenie lub zniweczyć wartość combobox

Dzięki

1

Tylko następujący kod działa dla mnie, więc spróbuj:

comboBox.ResetText(); //framework 4.0 
16

skojarzone zastosowanie próżni i mienia

comboBox.ResetText(); 

//to reset selected value 
comboBox.SelectedIndex = -1; 
+0

Pracowałem dla mnie. Dzięki. –

+0

Dla mnie 'ResetText()' było wystarczające. Czy istnieje powód, aby ustawić "SelectedIndex" na "-1"? – C4u

+0

tak, jest powód, ponieważ jeśli używasz wiążącego źródła z pracownikiem tła, który aktualizuje GUI po renderowaniu, więc po powiązaniu usunie tekst bez wartości spoczynkowej, do tego będziesz musiał użyć obu – Hisham

0

Miałem ten problem przez pewien czas, ale jeśli używasz:

"ComboBox.ResetText(); '

sprawi, że tekst "" pozostawi niezmienione elementy w polu kombi.

użyłem następujący kod w mojej aplikacji

private void UpdateComboBox(ComboBox Box, string Group, List<string> Numbers) 
     { 
       Box.Items.Clear(); 
       Box.BeginUpdate();    
       Box.Items.Add("<<Add Contact>>"); 
       foreach (string item in Numbers) 
       { 
        if(item != "") 
         Box.Items.Add(item); 
       } 
      Box.EndUpdate(); 
      Box.ResetText(); 
     } 

Więc biegnę metodę ostatni, gdy wszystkie elementy są w polu kombi.

0

ComboBox1.SelectedItem = null;

0

Nie wiem, czy ktoś nadal jest zainteresowany tym tematem, ponieważ jest to teraz 5 lat później, ale znalazłem bardzo łatwe obejście tego problemu. Zupełnie nieintuicyjne (I tylko okazało się, że patrząc na kodzie referencyjnym), ale trywialny do wdrożenia:

ComboBox1.FormattingEnabled = True; 

Tak, to wszystko jest do niego!

Jeśli jesteś ciekawy, możesz przeczytać source code, aby sprawdzić, co się dzieje. Wydaje się, że przyczyną błędu odnotowane przez @CuppM jest próba ustawić pozycję w źródle danych:

if (!FormattingEnabled || SelectedIndex != -1) { 
    this.DataManager.Position = this.SelectedIndex; 
} 

Przypuszczam, że powinien on być po prostu „& &” zamiast „|| " w warunku, ponieważ kod prawdopodobnie nie powinien ustawiać pozycji na nieprawidłową wartość, niezależnie od właściwości FormattingEnabled.

W każdym przypadku pozwala na proste obejście tego problemu. A ponieważ domyślne zachowanie, jeśli właściwość "Format" jest pusta, to operacja "no-op", nie trzeba niczego zmieniać. Po prostu działa. :-)

(Należy zauważyć, że próbowałem to tylko z .NET 4.7, więc nie mogę powiedzieć, czy to działa na poprzednich wersjach .NET Framework.)

Powiązane problemy