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# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?

Myrasz 09 Lip 2015 18:16 1551 14
REKLAMA
  • #1 14835748
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    Witam,
    Chciałbym odczytać wartości z jednej kolumny tabeli tak, aby przedstawiało się to następująco:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Szukając rozwiązania niestety napotykam tylko proste wyświetlanie wiersza w wielu textboxach, co mnie nie interesuje zupełnie - udaje mi się jedynie wczytać pierwszą wartość z kolumny.
    Dodam tylko, że DGV nie występuje w oknie z textboxami zasyjącymi dane, więc użycie DGV_CellClick odpada.

    Tabela, z której chciałbym zassać dane wygląda następująco(interesuje nas kolumna "Cena"):
    C# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?

    Natomiast okno, w którym miałyby być wyświetlone:
    C# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?

    Chciałbym ominąć wpisywanie wartości w każdym textboxie na sztywno, gdyż cennik może ulec zmianie.
    Kod, z którego korzystam w chwili obecnej:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Będę wdzięczny za wszelkie wskazówki.
    Dodam tylko, że jestem początkującym "programistą" i traktuję to bardziej jako zainteresowanie, hobby.
  • REKLAMA
  • #2 14835834
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Wg przykładu masz 10 wierszy w dgv i 10 pól w raporcie - rozumiem, że zawsze robisz raport na te 10 pól i zawsze będą one w tej samej kolejności??
    Pola w tym "raporcie" masz wstawione na sztywno czy generujesz je dynamicznie?
  • REKLAMA
  • #3 14835871
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    marcinj12 napisał:
    Wg przykładu masz 10 wierszy w dgv i 10 pól w raporcie - rozumiem, że zawsze robisz raport na te 10 pól i zawsze będą one w tej samej kolejności??
    Pola w tym "raporcie" masz wstawione na sztywno czy generujesz je dynamicznie?


    Dokładnie wszystko jest na sztywno - nic nie ulega zmianie, kolejność również.
  • #4 14835904
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    TO w takiej najprostszej wersji zrób sobie np. tak:
    Kod: C#
    Zaloguj się, aby zobaczyć kod
    Przy okazji będziesz miał pewność, że pole o danym ID trafi do właściwego textboxa.
  • #5 14835988
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    Super! O to chodziło - dziękuję bardzo.
    A jeśli można jeszcze skorzystać z pomocy - jak najprościej przekonwertować wartości z textboxów na walutowe (coś w stylu ToString("c"))
  • REKLAMA
  • #6 14836372
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    O to chodzi?
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #7 14836474
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    marcinj12 napisał:
    O to chodzi?
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Hmm, ja to osiągnąłem inaczej, ale jeśli powyższy przykład jest dobry, to w którym momencie go umieścić? Próbowałem podczas Form_Load, ale nie hula, pod buttonem również, szczególnie jakbym chciał przekonwertować, więcej niż jeden textbox.
    Ja użyłem walut podczas sumowania kolumny w DGV, poszło ładnie:
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #8 14836503
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Tak też to można zrobić - kwestia typu zmiennej Service2, liczbę z przecinkiem możesz zapisać jako typ double bądź numeric...
  • #9 14836554
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    Oczywiście tylko pamiętajmy, że DGV nie występuje w tej samej formie co txtboxy, więc powyższego kodu nie użyję w chwili obecnej.
  • #10 14836587
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Myrasz napisał:
    Oczywiście tylko pamiętajmy, że DGV nie występuje w tej samej formie co txtboxy
    No tak, ale teraz dane masz też w tabeli DataTable w metodzie WyswietlForme - czyli w pętli możesz odwołać się np. do row[2].ToString() zamiast do dgv.rows.cells(xxx).

    Możesz też zsumować całą kolumnę poleceniem dt.Compute( Sum(xxx) ):
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #11 14837020
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    marcinj12 napisał:
    No tak, ale teraz dane masz też w tabeli DataTable w metodzie WyswietlForme - czyli w pętli możesz odwołać się np. do row[2].ToString() zamiast do dgv.rows.cells(xxx).


    Kurcze, próbowałem tak jak piszesz powyżej, ale niestety nie wychodzi. Kod wygląda tak:

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

    Wynik w pierwszym textBoxie:
    C# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?

    EDIT

    Trochę pokombinowałem i wydaje mi się, że niewiele brakuje, ale wynik jest niespodziewany. Poniższy kod przesuwa przecinek o jedno miejsce, waluta jednak się pojawia:
    z 0,89zł robi się 8,90zł; z 10,91zł -> 109,10zł.
    Szczegóły:
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Wynik:
    C# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?

    EDIT2

    Dobra, oczywiście rozwiązanie było proste, ale oczywiście musiałem kombinować jak koń pod górę. Wystarczyło zmienić operatora z "+=" na "=" w linii:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    W tej sytuacji kod przedstawia się następująco:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Bardzo dziękuję za udzieloną pomoc. Czy temat możemy uznać za zamknięty?
  • #12 14839102
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Myrasz napisał:
    Bardzo dziękuję za udzieloną pomoc. Czy temat możemy uznać za zamknięty?
    Chyba nie :)
    Wydaje mi się, że faktycznie namieszałeś kombinując jak koń pod górkę... Trochę się pogubiłem w tym co chcesz osiągnąć, ale rozumiem, że chcesz po prostu wyświetlić w textboxie liczbę w formacie walutowym??
    W takim razie niepotrzebnie robisz te "wewnętrzne" pętle, które po 10 razy robią konwersję tej samej liczby. Skracając kod, można to zapisać tak:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Z Twoich poprzednich postów wywnioskowałem - chyba błędnie - że pytasz, jak wartość tekstową zamienić na liczbę, a potem je zsumować - i tego też dotyczyły moje odpowiedzi... :)
  • #13 14839935
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    Niestety tak mam, że tłumaczę strasznie niejasno :) Rzeczywiście teraz kod jest bardziej przejrzysty.

    Chciałem jeszcze usprawnić co nieco tą formę i zrobić sumę textboxów, a gdzieś po drodze mnożenie jednego (gdzie wprowadzam dane) przez drugi (gdzie dane już są załadowane podczas uruchamiania formy (to co robiliśmy powyżej) :)

    Obrazowo:
    C# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?
    Tłumaczenie powyższego:
    textbox1 (kulmna Ilość) * textbox2 (kolumna Cena jedn.) = textbox (kolumna Suma)
    Ponadto Suma wszystkich już uzupełnionych textboxów z kolumny Suma i wynik tego w ostatnim textBoxWynik znajdujący się bezpośrednio nad DGV.

    Spoiler:
    Niestety mnożenie mi całkowicie nie wychodzi, cały czas błąd: Nieprawidłowy format ciągu wejściowego.
    Przykładowy kod jaki użyłem:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Z tego co wiem, int nie mogę użyć, gdyż występują ułamki dziesiętne. Nie wiem, gdzie robię błąd.

    Natomiast dodawanie działa tak sobie, wydaje mi się, że z ułamkami też nie wychodzi, gdyż mając tak uzupełnione textboxy jak na rysunku, z tym jednym co zawiera kwotę: 346,70zł jak widać wynik = 0.
    Kod do sumowania mam następujący:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Z dodawaniem się uporałem, natomiast z mnożeniem jestem na dobrej drodze, ale niestety wynik zwraca: 0,00zł.
    KOD:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    C# - Jak odczytać kolumnę z bazy danych do wielu TextBoxów?
    Ostatecznie chciałbym wszystko(oprócz kolumny Ilość) sprowadzić do formatu waluty jak w środkowej kolumnie :) Jesteś w stanie wskazać, gdzie robię błędy?
  • Pomocny post
    #14 14840220
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Przykład mnożenia dwóch textboxów:
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Przykład prostego sumowania dla 10 textboxów w formacie walutowym:
    Kod: C#
    Zaloguj się, aby zobaczyć kod
    Oczywiście można próbować uprościć ten zapis - użyć tablic lub list, pętli, wydzielić do osobnej metody próbę konwersji na decimal etc.
  • #15 14840417
    Myrasz
    Poziom 20  
    Posty: 543
    Pomógł: 10
    Ocena: 82
    Wielkie dzięki! O to chodziło :) Nie mam słów, żeby opisać swoją wdzięczność.

    Pozdrawiam

Podsumowanie tematu

✨ Użytkownik poszukiwał sposobu na odczytanie wartości z jednej kolumny bazy danych i wyświetlenie ich w wielu TextBoxach w aplikacji C#. W odpowiedziach zaproponowano użycie SqlDataAdapter do wczytania danych do DataTable, a następnie iterację przez wiersze, aby przypisać wartości do odpowiednich TextBoxów. Użytkownik chciał również przekonwertować wartości na format walutowy, co zostało rozwiązane poprzez użycie metody decimal.Parse oraz ToString("c"). Dodatkowo, poruszono temat sumowania wartości z TextBoxów oraz mnożenia ich, co również zostało omówione z przykładami kodu.
Wygenerowane przez model językowy.
REKLAMA