Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C#]Windows Forms: Konwersja na int wartości zwracanej przez ListBox'a

armant 15 Mar 2012 15:06 1537 6
  • #1 15 Mar 2012 15:06
    armant
    Poziom 8  

    Podpiąłem pod bindingsource'a tabelę zaciągniętą z bazy danych sql. Następnie zaś wykorzystałem tego bindingsource'a w listbox'ie ustawiając mu jako wyświetlaną wartość kolumnę Name tabeli (ListBox.DisplayMember="Name") a jako zwracaną wartość kolumnę ID tabeli (ListBox.ValueMember="ID") - kolumna ta jest kluczem głównym tabeli i zawiera wartości typu int.
    Sprawdziłem konwertując zwracaną przez ListBox'a wartość na string'a (Convert.ToString(ListBox.SelectedValue)) i wyświetlając ją w textbox'ie - to jest liczba. Niemniej jednak w żaden sposób nie mogę jej przerobić na int - cały czas wyrzuca mi wyjątek "Input string was not in a correct format."

    0 6
  • Pomocny post
    #2 15 Mar 2012 15:11
    Defice
    Poziom 25  

    A nie powinno być przypadkiem:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Pod x masz teraz string, możesz użyć int.Parse(x) i masz int

    0
  • #3 15 Mar 2012 15:20
    armant
    Poziom 8  

    Defice napisał:
    A nie powinno być przypadkiem:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Pod x masz teraz string, możesz użyć int.Parse(x) i masz int


    ListBox.Text jest równoznaczny z Listbox.DisplayMember i ma wartość z kolumny "Name", a ja potrzebuję uzyskać powiązaną z nią wartość z kolumny "ID" zwracaną przez ListBox.ValueMember - tylko uzyskać ją jako int.

    Próbowałem już konwertować na string'a tą wartość (ListBox.ValueMember), a następnie przerobić ją na int za pomocą int16.Parse(), ale dalej mi wyrzuca wyjątek nieprawidłowego formatu...

    0
  • Pomocny post
    #4 15 Mar 2012 15:26
    Defice
    Poziom 25  

    Miałem podobny problem, skorzystałem wtedy z int.Parse() a nie int16.Parse() i u mnie w aplikacji to działa.

    A co do pozyskiwania wartości, to musisz użyć polecenia SELECT odpowiednio przeładowanego.

    0
  • #5 15 Mar 2012 15:44
    armant
    Poziom 8  

    Defice napisał:
    Miałem podobny problem, skorzystałem wtedy z int.Parse() a nie int16.Parse() i u mnie w aplikacji to działa


    Kod wygląda tak:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Wyjątek ten występuje niezależnie od metody, której używam do konwertowania - czy jest to Int.Parse(), Int16.Parse(), Convert.ToInt16(), za każdym razem mam "Input string was not in correct format".

    0
  • Pomocny post
    #6 15 Mar 2012 18:07
    LED5W
    Poziom 32  

    Skoro twierdzisz, że SelectedValue jest typu int, sprawdź ten kod:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #7 16 Mar 2012 11:44
    armant
    Poziom 8  

    Odkryłem o co chodzi - zajęło mi to troszkę czasu, ale już wiem.

    Listbox.SelectedValue jest int'em i nie ma najmniejszych problemów z jego rzutowaniem czy konwersją na int. Problem dotyczy samego tworzenia formy z feralnym listbox'em. Otóż konwersja wartości SelectedValue na int'a umieszczona jest w zdarzeniu Listbox.SelectedIndexChanged. Pobawiłem się trochę wyjątkami i zanim zacznie ona normalnie działać występują dokładnie dwa wyjątki niepoprawnego formatu danych - przy otwieraniu formy.

    Wychodzi na to, że podczas otwierania formy z listbox'em, podczas ininicjalizowania obiektów, jeszcze zanim zostanie pod listbox'a podpięty bindingsource, dwa razy występuje zdarzenie Listbox.SelectedIndexChanged.

    Wystarczyło poprzestawiać kolejność inicjowania poszczególnych elementów i problem został rozwiązany.

    0