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# - aplikacja drag&drop, kafelki, database itp.

kafus6 19 Wrz 2014 01:38 6759 79
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak podejść do napisania aplikacji w C# z dynamicznie tworzonymi kafelkami pracowników, bazą danych i przeciąganiem elementów między managerami/działami?

Najlepiej zrobić to w WPF, z danymi bindowanymi do kolekcji w MVVM, a kafelki generować dynamicznie na podstawie rekordów z bazy; w WinForms też się da, ale przy bardziej graficznym UI i drag&drop będzie trudniej i mniej elastycznie [#13972417][#13972723][#13986507][#13987886] Jeśli chcesz zacząć prościej, możesz użyć zwykłego układu tabelarycznego, np. TreeView, albo dynamicznie tworzyć labele/buttony w panelach, a przy większej liczbie elementów lepiej rozważyć własną kontrolkę lub rysowanie GDI+ zamiast samego przesuwania kontrolek [#13974634][#13973238] Elementy najlepiej tworzyć w pętli po danych z bazy (np. foreach po DataTable/DataReader), a nie mieszać logiki UI z SQL-em; warto też od razu rozdzielić warstwę GUI, logikę biznesową i dostęp do danych [#13993038][#13994053][#13986507]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 13972048
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Witam,

    Wymyśliłem sobie dzisiaj programik drag and drop.

    Zamieściłem obrazek, żeby lepiej wytłumaczyć o co chodzi.

    C# - aplikacja drag&drop, kafelki, database itp.

    Pomijając logowania itp- tak ma wyglądać przykładowo główny pulpit dla Manager 1.
    Ideą programu jest to, żeby można było "rozdawać" pracowników innym menagerom lub/i zmieniać ich działy itp. za pomocą drag&drop ( pod windowsem 7!!).

    Managerów, działy oraz pracowników programik brałby z bazy danych.
    Prosiłbym o idee jak się za takie coś zabrać.
    Chodzi mi o:

    1. Windows form czy WPF.
    2. Jak, czym, w jaki sposób zrobić "dynamiczne" tworzenie się kafelków (np. pojawianie się ich po dopsaniu pracownika w bazie danych. Może dodać pule nieprzydzielonych pracowników tak, aby każdy mógł "wziąć" go do swojego działu?).
    3.Czym byłby kafelek? buttonem, labelem, obrazkiem?


    Proszę o ogólne- nawet luźne- sugestie. Od razu mówie, że nie chodzi mi o wodotryski. Na początku coś prostego :) ewentualnie potem będę dodawać wiązanie krawatów, robienie gofrów i usuwanie ciąży :)
  • REKLAMA
  • #2 13972417
    truski
    Poziom 18  
    Posty: 166
    Pomógł: 34
    Ocena: 21
    Pytanie czy interesuje cię przerzucanie pracowników graficznie - mam tu na myśli jakiś wizualny graf połączeń czy nazwijmy to tabelarycznie - masz listy i przerzucasz pracowników między listami.
    Tak czy inaczej, skoro jest to Windows 7 to WPF, tym bardziej jeśli chciałbyś robić to w postaci grafu.

    Jeśli byłbyś zainteresowany wizualizacją na grafach, to musiałbyś się rozejrzeć za jakąś kontrolką wspomagającą operacje na grafach - kiedyś używałem ILOG Diagram for .Net i było to bardzo fajnie zrobione, niestety było to płatne i z jakiegoś powodu zostało wycofane ze sprzedaży. Możesz również spróbować GraphX ze zdjęć na stronie wygląda, że posiada kontrolki do tworzenia diagramów osobowych i wspiera mechanizmy rozkładu elementów
  • #3 13972723
    przemko07
    Poziom 16  
    Posty: 161
    Pomógł: 24
    Ocena: 4
    ja proponuje WPF,
    obiekty można przesyłać do widoków i przedstawiać je niezaleznie od struktury obiektu.
    może być wyświetlony w tabeli albo na grafie, WPF + XAML + Binding oddziela logikę biznesową od prezentacji/widoków.
  • #4 13972808
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    To ja tylko dodam, że w WinFormsach też można próbować wyrzeźbić jakieś rozwiązanie. W załączniku taki mały, prosty przykład na labelach i panelach (kontenerach na te labele), przesuwanych standardowymi zdarzeniami myszy.
    Nie wiem jak będzie z wydajnością przy znacznie większej ilości itemów, można też stworzyć strukturę w pamięci i rysować jej elementy za pomocą GDI, ale z tym więcej zabawy.
    Załączniki:
    • DragNDrop.zip (74.12 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 13973035
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Dzięki wszystkim za sugestie :)

    marcinj12 : pytanie, czy label'e i Panel'e można podpiąć do bazy danych?
    Jeden Label do jednego pracownika, jeden Panel do jednego działu.
    Dodatkowo czy Labele mogą być generowane z automatu w zależności ilu jest pracowników?

    truski : wystarczy 'tabelarycznie'
  • REKLAMA
  • Pomocny post
    #6 13973065
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    kafus6 napisał:
    marcinj12 : pytanie, czy label'e i Panel'e można podpiąć do bazy danych?
    Jeden Label do jednego pracownika, jeden Panel do jednego działu.
    Dodatkowo czy Labele mogą być generowane z automatu w zależności ilu jest pracowników?
    Pewnie, można generować kontrolki dynamicznie. To jest tylko przykład, jeżeli chcesz użyć automatu, to musisz sobie go wykombinować :).
  • #7 13973088
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Wykombinować... ok :) podejrzewam, że temat jeszcze długo będzie tutaj męczony przeze mnie :)
  • REKLAMA
  • #8 13973238
    truski
    Poziom 18  
    Posty: 166
    Pomógł: 34
    Ocena: 21
    Jeśli jednak chcesz korzystać w WinForms to ja bym się skłaniał w kierunku rysowania GDI+, wbrew pozorom to wcale trudne nie jest, a na pewno będzie działać lepiej niż przesuwanie labeli/paneli czy czegokolwiek innego. Ewentualnie możesz napisać swoją własną kontrolkę, zawierającą tylko tobie potrzebne właściwości. Z drugiej strony do takich rzeczy wykorzystuje się właśnie WPF, który ma wsparcie sprzętowe do renderowania grafiki i jest po prostu prostszy niż WinForms i GDI+.
  • #9 13973567
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Z tym, że w WPF jeszcze nie robiłem. Nie jestem też na tyle biegły w C# żeby pisać swoje kontrolki. Jakbyś podał jakieś przykłady drag&drop oraz kontrolki do tego to byłbym wdzięczny. Wybrałem WinForms bo marcinj12 podał przykadł i miałem już jakiś zalążek.:) Jak masz gdzieś coś to prosiłbym o załączenie- każda pomoc mi się przyda :)

    Nie upieram się przy WinForms... chciałbym coś takiego napisać i chciałbym umieć coś takiego zrobić :) jakoś się trzeba uczyć tego C# :)
  • #10 13974634
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Jeśli nie potrzebujesz wodotrysków, to możesz na początku zamiast takiego "bajeranckiego" przeciągania zastosować coś prostszego - często można spotkać taki efekt zrobiony na standardowej kontrolce TreeView, bo domyślnie wspiera ona przeciąganie itemów między gałęziami, trzeba tylko oprogramować kilka zdarzeń.

    Zerknij na kolejny załącznik z gotowym przykładem - ten ma dwie funkcje, które na razie udają, że pobierają dane z bazy danych, ale można je łatwo zastąpić zapytaniami SQL. Jeśli dobrze rozumiem strukturę, to jeden manager może mieć pod sobą kilka działów - w związku z tym ludzi można "przeciągać" z jednego działu do drugiego upuszczając ich na oznaczone na niebiesko działy.

    Warto dodać, że część właściwości kontrolek została ustawiona z designera - jeśli będziesz chciał zrobić coś podobnego, to zwróć uwagę we właściwościach na wytłuszczone pozycje.
    Załączniki:
    • DragNDrop.zip (89.4 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #11 13976593
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Skąd Ty to bierzesz ? :) Też mógłbym poszukać jakbym wiedział gdzie :)

    Jeśli chodzi o Twój ostatni przykład:
    Chciałbym tylko wiedzieć czy można 'dorysować' efekt przeciągania- zależałoby mi na nim bo chciałbym, żeby aplikacje można było wykorzystać na ekranie dotykowym (win 7 przypominam)

    ps. W designerze nie widzę nic oprócz pustego treeView'a tak ma być ?
  • #12 13976674
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    Każdą kontrolkę można niemal w każdym aspekcie dowolnie konfigurować i zmieniać. Samego efektu chyba nie ma, koledzy już wcześniej wspomnieli, że do tego typu bajerów służy WPF. WinForm, jest ubogi w graficzne.
  • #13 13976678
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    kafus6 napisał:
    Skąd Ty to bierzesz ? :) Też mógłbym poszukać jakbym wiedział gdzie :)
    Z Internetu?? Google -> c# treeview drag and drop..
    kafus6 napisał:
    Jeśli chodzi o Twój ostatni przykład:
    Chciałbym tylko wiedzieć czy można 'dorysować' efekt przeciągania- zależałoby mi na nim bo chciałbym, żeby aplikacje można było wykorzystać na ekranie dotykowym (win 7 przypominam)
    Jakiś tam efekt przeciągania domyślnie jest - pojawia się taki mały prostokącik przy kursorze. Bardziej zaawansowane animacje wymagają bardziej zaawansowanych kroków lub użycia innej technolgii (choćby wspomnianego WPFa)- nie widziałem potrzeby komplikowania tematu, drzewko to tylko jedna z propozycji, uboższa graficznie, ale i prostsza w implementacji.
    kafus6 napisał:
    ps. W designerze nie widzę nic oprócz pustego treeView'a tak ma być ?
    Tak. Węzły i itemy tworzysz samemu w kolekcji Nodes.

    Z jednej strony piszesz że dopiero zaczynasz i nie znasz się na tym za bardzo, z drugiej strony - rzucasz się od razu na głęboką wodę niestandardowych modyfikacji... Proponuję powoli i krok po kroku. Zrób tak, jak potrafisz i w czym potrafisz, nie licz na gotowce - co najwyżej możesz się nimi podeprzeć jako podstawą swojego projektu.
  • #14 13976921
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Jak najbardziej nie liczę na gotowce! Nawet nie chcę, ale jak wspomniałeś- chciałbym mieć podstawę. Jeśli chodzi o rzucanie się na głęboką wodę to... po prostu lubię tak zaczynać. Od razu coś trudnego- wiem, są złe i dobre strony takiego rozwiązania.
    W takim razie postaram się bazować na tym TreeView lub poszukać czegoś jednak w WPF... hmm, tylko jak szukałem to nie umiałem znaleźć nic ciekawego.

    edit:
    Czy takie coś mi się przyda ? Może ktoś podpowiedziec? :)
    WPF drag&drop
  • #15 13984625
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    No więc...

    WPF jest dziwny :) ale podjąłem się wyzwania...

    zacząłem więc od początku.
    Szukam teraz skryptu dzięki, któremu będę mógł tworzył Label'e automatycznie z danych z bazy danych. Np:

    mam tabele workers [imie] [nazwisko]
    gdy kliknę sobie na button "zaladuj_dane" to program ma automatycznie utworzyć labele tych pracowników. Label będzie np. z kolorem, wielkości etc.

    Jakby ktoś znalazł "przypadkiem" jakiś przykład tego, byłbym bardzo wdzięczny. :)

    Edit:
    Zapewne będzie potrzebna pętla foreach - moze ktoś podpowiedzieć jakie założenia miałaby mieć pętla? Nie wiem czy zaczynam dobrze...

    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #17 13985591
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    O widzisz :) Dzięki za info.

    Nie umiem jedna poradzić sobie z zamianą z forms'ów:

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


    Niestety w WPF nie ma (po prostu) panel'a. Próbowałem na różnych innych panelach, ale żaden nie ma metody Controls.Add


    Edit:

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


    To chyba będzie dobre. Jednak wywala mi błąd przy linijce:

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


    błąd: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.

    ConnectString jest ustawiony w pliku app.config. Czy o czymś zapomniałem ?

    Edit:

    boszsz...nie było pytania. Za długo już patrze na to...

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


    Dodano po 5 [godziny] 16 [minuty]:

    utknąłem.
    Nie chce pobierać danych z bazy danych.
    Tzn.
    tworzy Textboxa (w finalnej wersji nie bedzie textboxa ale tylko jego widać wiec jest to tylko dla testów) ale go nie wypełnia.
    Natomiast bo labelu ani śladu :(

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


    Zasadniczo podejrzewam gdzie może być błąd( i na pewno jest), ale nie umiem inaczej tego wymyślić... jakby ktoś podpowiedział z tym foreach- moim przekleństwem

    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #18 13986507
    przemko07
    Poziom 16  
    Posty: 161
    Pomógł: 24
    Ocena: 4
    WPF'owe aplikacje nie buduje sie tak samo jak WinForm.
    WPF to nie jest tylko zmiana nazw kontrolek ale idea tworzenia aplikacji desktopowych, tą ideą jest MVVM.
    zamieszczam app w MVVM jako przykład.

    jest tam okazane jak prezentowac kolekcje na ekranie i nimi zarzadzac.
    natomiast Drag&Drop dla MVVM znajdziesz tutaj:

    http://www.codeproject.com/Articles/420545/WPF-Drag-and-Drop-MVVM-using-Behavior

    mi się już nie chciało z dragdropem bawić w tym przykładzie więc zostawiam to tobie.
    Załączniki:
    • WpfApplication18.zip (155.62 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #19 13987857
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    hmmm... myślałem, że będzie to trochę prostsze :) (bardziej podobne do C#)
    Możecie mi więc powiedzieć, jeszcze raz, na podstawie tego co chciałbym napisać- co stracę pisząc w C#? - czegoś nie będzie można zrobić? Pytam po prostu trzeba do tego wykorzystywać WPF'a. Jeśli podobny efekt będzie w C# - to czemu nie on ?:)

    ps. Dziękuje Ci za przykłady, posłużą mi do powolnego wdrażania się w WPF :)
  • Pomocny post
    #20 13987886
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    No cóż, to nadal jest C#. A Pytanie co stracisz, chyba nie jest odpowiednie. Ja powiedziałbym raczej, co zyskasz przechodząć na WPF. WinForm pozbawiony jest "fajerwerków" czyli stracisz na efekcie wizualnym (oczywiście można ściągnąć sobie jakieś graficzne nakładki). Co więcej WinForm nie jest dedykowany do zaawansowanej grafiki (wielu elementów w formie) gdy mamy spore nagromadzenie komponentów graficznych zwyczajnie "zamula" oraz długo wczytuje się wywoływana forma (zwykle za pierwszym razem).

    Natomiast prawda jest taka, że jeśli ilość elementów będzie nieduża, to nie zauważysz jakiejś wielkiej różnicy. Pozostaje Ci podjąć decyzje mając na uwadze, ile elementów docelowo znajdzie się na formie.
  • #21 13987902
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Defice napisał:

    Natomiast prawda jest taka, że jeśli ilość elementów będzie nieduża, to nie zauważysz jakiejś wielkiej różnicy. Pozostaje Ci podjąć decyzje mając na uwadze, ile elementów docelowo znajdzie się na formie.


    Tak prawdę mówiąc "na raz" na pulpicie będzie...hmmm... 6-8 elementów graficznych("graficznych":) - czyt. label z jakimś tam tłem etc)
    Reasumując: duże aplikacje = WPF (?)

    Edit: Mówiąc C# mam na mysli oczywiście WindowsForms.
  • REKLAMA
  • #22 13987939
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    Głowy nie dam, ale pewnie nie będziesz widział różnicy przy takiej ilości elementów. Śmiało możesz pozostać przy Windows Form. Jeśli sobie wszystko "ładnie" poustawiasz (tła, buttony itp) oczywiście też będzie wyglądało estetycznie.
  • #23 13988006
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Czyli się nie dowiemy zanim tego nie napisze :)

    ps. ten twój avatar.... mam wrażenie, że gdy piszesz post to się ze mnie śmiejesz i/lub trollujesz mnie :)
  • #24 13988025
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    Raczej wiele pisania mieć nie będziesz, wystarczy, że zbudujesz sobie elementy graficzne, co działo się będzie w tle raczej nie ma większego znaczenia. Będą to proste operacje z tego co pisałeś, jeśli baza załaduje się podczas startu wszystko będzie śmigało.

    A o avatara się nie bój, jakbym coś próbował wykombinować to moderatorzy czuwają i rozdają "nagrody" dla takich pomocników :)
  • #25 13988342
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Wracając do tematu- jestem w kropce.
    No więc kontynuując:

    Tutaj cały kod, poniżej fragment do wymiany:

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


    Ta pętla foreach wpędzi mnie w depresje:

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


    Problem jest z linijką:
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    "Istnieje już skojarzony z tym poleceniem otwarty element DataReader, który należy najpierw zamknąć poleceniem (Command)."
    Niby wiem o co chodzi, no ale jak zamknąć DataReader skoro musi być otwarty ?:)

    Do app.config dodałem nawet MARS'a, ale to nic nie zmienia.
    Edit: Edit: Edit:
    Postanowiłem usunąc połowę tego postu, bo nic nie wnosił.
  • #26 13990727
    Defice
    Poziom 25  
    Posty: 698
    Pomógł: 101
    Ocena: 15
    Coś tu namieszane w tym kodzie, jeśli możesz wrzuć w załączniku projekt. Poprawie Ci to, ale muszę mieć to otwarte w VS.

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


    Te linie nie mają sensu. Jeśli wartość bierzesz z DGV, to niepotrzebny Ci reader. On służy do odczytania czegoś z bazy i wrzucenia do np. DGV. A jak masz to już wyświetlone to wrzucasz to do zmiennej tak:

    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #27 13991330
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Wiem, namieszałem strasznie.
    poprawiłem i pojawił się kolejny błąd w linii:

    lbl1[i].Text = getValue;

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


    W załączniku wysyłam cały projekt w VS.
    Powiem o co chodzi:

    Chiałbym utworzyć Label z Database. Potem ten lbl będzie mi służył do zrobienia Drag&drop do panel'u, ale to już dalszy problem :)
    Załączniki:
    • WindowsFormsApplication1.rar (42.97 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #28 13991387
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Proponuję najpierw zapoznać się z podstawami obsługi baz danych - co to jest i jak używać SqlCommand, DataTable, jak odczytać coś z bazy, czym się różni ExecuteScalar od ExecuteReader etc, bo na razie widzę mnóstwo błędów typu "zobaczę, co się stanie jak ten kod tu wstawię"...
    Np. ten link albo ten.
  • #29 13991392
    kafus6
    Poziom 14  
    Posty: 162
    Pomógł: 10
    Ocena: 2
    Marcinie, masz racje- tak trochę działam - po omacku :)

    Posłucham twoich zaleceń i w między czasie poczytam/pooglądam. Chociaż muszę przyznać, że czytanie to jedno, a pisanie to co innego- przynajmniej w moim przypadku.

    Edit: no więc wyedukowałem się i prawie mi wyszło. Pokazuje Labele (3 labele- i to jest ok bo mam 3 wiersze w database) ale takie same- wypełnione pierwszym wierszem.

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


    Edit:
    ok. ślepy jestem
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    zmieniłem na:
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Zastanawia mnie tylko jedna rzecz. Dlaczego/skąd program wie, że ma zmienić(jak on to zmienia) row[0] na row[1] itd.
    a jakbym chciał czytać co drugą? (to tak na przyszłość zebym wiedział)

    Aha, pytanie nr2: jak uniknąć błędu podczas kliknięcia drugi raz na "wczytany" button? "Indeks wykraczał poza granice tablicy."
  • Pomocny post
    #30 13993038
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    ]
    kafus6 napisał:
    Zastanawia mnie tylko jedna rzecz. Dlaczego/skąd program wie, że ma zmienić(jak on to zmienia) row[0] na row[1] itd.
    a jakbym chciał czytać co drugą? (to tak na przyszłość zebym wiedział)
    Pętla forech automatycznie bierze kolejne wiersze z tabeli i zapisuje je do zmiennej row. To, którą kolumnę ma wczytać, podajesz sam pisząc
    Kod: C#
    Zaloguj się, aby zobaczyć kod
    . Analogicznie, kolejne kolumny to row[1], row[2] etc. - można też odwołać się do nazwy kolumny, tj.
    Kod: C#
    Zaloguj się, aby zobaczyć kod
    etc.

    kafus6 napisał:
    Aha, pytanie nr2: jak uniknąć błędu podczas kliknięcia drugi raz na "wczytany" button? "Indeks wykraczał poza granice tablicy."
    Pisać poprawny kod...
    Takie użycie globalne zmiennych i, r, c, x jest bardzo brzydkie, a jak się do tego nie wie jak je zastosować - prowadzi to do błędów jak w przykładzie... W tym wypadku nie zerujesz zmiennych po kliknięciu przycisku, więc drugie jego kliknięcie startuje od ostatnio ustawionej wartości i indeks wykracza poza tablicę labeli. Ale i tak nie ma żadnych przesłanek, żeby stosować te zmienne globalnie - wystarczy umieścić je w zdarzeniu obsługi przycisku. W dodatku nie ma potrzeby stosowania aż 4 zmiennych - wszystko można załatwić jedną.

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

    Pomijając bezsensowne użycie tutaj metody ExecuteScalar() i w ogóle wykonywania zapytania w tym miejsc - co jak piszesz poprawiłeś - metoda ToString() nigdy nie da wartości null, więc ten warunek if będzie zawsze spełniony. Jeśli już, porównuj do pustego ciągu znaków: "", string.Empty albo użyj metody string.IsNullOrEmpty()

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zaplanował stworzenie aplikacji w C# z funkcjonalnością drag and drop, która umożliwi zarządzanie pracownikami i menedżerami poprzez interfejs graficzny. Dyskusja dotyczyła wyboru między Windows Forms a WPF, z zaleceniem użycia WPF ze względu na lepsze wsparcie dla grafiki i dynamicznego tworzenia elementów. Uczestnicy wymieniali się pomysłami na implementację kafelków reprezentujących pracowników oraz menedżerów, a także na obsługę zdarzeń drag and drop. Pojawiły się również pytania dotyczące integracji z bazą danych oraz dynamicznego generowania kontrolek na podstawie danych z bazy. Wskazówki obejmowały użycie pętli foreach do iteracji po danych oraz rzutowanie obiektów w C#. Użytkownik napotkał problemy z przenoszeniem etykiet (labeli) oraz ich wyświetlaniem w odpowiednich miejscach, co prowadziło do dalszych dyskusji na temat zarządzania kontrolkami w aplikacji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA