logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

armant 15 Mar 2012 15:06 1975 6
REKLAMA
  • #1 10680617
    armant
    Poziom 9  
    Posty: 31
    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."
  • REKLAMA
  • Pomocny post
    #2 10680640
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    A nie powinno być przypadkiem:

    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Pod x masz teraz string, możesz użyć int.Parse(x) i masz int
  • REKLAMA
  • #3 10680669
    armant
    Poziom 9  
    Posty: 31
    Defice napisał:
    A nie powinno być przypadkiem:

    Kod: C#
    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...
  • REKLAMA
  • Pomocny post
    #4 10680696
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    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.
  • REKLAMA
  • #5 10680755
    armant
    Poziom 9  
    Posty: 31
    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: C#
    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".
  • Pomocny post
    #6 10681358
    LED5W
    Poziom 34  
    Posty: 2302
    Pomógł: 264
    Ocena: 162
    Skoro twierdzisz, że SelectedValue jest typu int, sprawdź ten kod:
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #7 10684273
    armant
    Poziom 9  
    Posty: 31
    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.

Podsumowanie tematu

✨ Użytkownik napotkał problem z konwersją wartości zwracanej przez ListBox w aplikacji Windows Forms, gdzie ListBox był powiązany z BindingSource z danymi z bazy SQL. Mimo że wartość SelectedValue była typu int, konwersja na int powodowała wyjątek "Input string was not in a correct format". Po kilku próbach konwersji i analizie kodu, użytkownik odkrył, że problem wynikał z nieprawidłowej kolejności inicjalizacji elementów formularza, co prowadziło do wywołania zdarzenia SelectedIndexChanged przed podłączeniem BindingSource. Po poprawieniu kolejności inicjalizacji problem został rozwiązany.
Wygenerowane przez model językowy.
REKLAMA