Wyświetlanie komórek z wiersza bazy danych w osobnych textboxach na formularzu

0

Cześć,

chciałbym Was podpytać o sposób jak wyświetlać dane z poszczególnych komórek wiersza z tabeli DB w osobnych textboxach na formularzu? Nie chcę wyniku zapytania zwracać w gridzie, a chciałbym dla każdej pozycji utworzyć textbox. Dla lepszego zrozumienia: powiedzmy że mamy DB z zabawkami i kolumny: ID, nazwa zabawki oraz 10 kolumn z różnymi kolorami (biały, czarny, zielony itp). W tych kolumnach podajemy np. ilość dostępnych zabawek w danym kolorze.
Teraz na formularzu chciałbym pokazać DropDownListę, z której można byłoby wybrać model zabawki, a pod spodem w 10 kontrolkach pokazałby się stan każdego z kolorów.

Zakładam prostszą wersję, czyli zawsze na formularzu są kontrolki ze wszystkimi kolorami, natomiast jeśli zabawka nie występuje w jakimś kolorze, bądź jest 0 na stanie, to po porostu będzie 0 w kontrolce, czy co tam w bazie będzie. Wersja trudniejsza (może kiedyś jak wzrosną moje umiejętności) - jeśli w bazie w danym kolorze jest 0, to kontrolki na formularzu nie ma wcale.

Oczywiście program ma liczyć inne rzeczy niż zabawki - to tylko przykład.

Z góry bardzo dziękuję za pomoc,
pozdrawiam
Marcin

0

Winforms czy WPF ?
Na podstawie danych musisz wygenerować dynamicznie kontrolki. Czyli dla każdego koloru generowana jest nowa kontrolka. Kontrolki to klasy więc możesz je tworzyć np. tak var textbox = new TextBox(); a następnie dodajesz je do formy form1.Controls.Add(textbox);. Oczywiście będzie zabawa z ustawieniem ich w odpowiednich miejscach.

0

Windows Form App - mógłbyś pomóc mi zbudować jeden kawałek? Wrzucisz jakiś przykładowy kod. To moje początki z programowanie w ogóle, nie tylko z C#. Zabawa z ustawieniami na formularzu to już dłubanina, ale to potrafię zrobić. To nie problem.

0

Co Ci to da, jak podamy Ci kod, którego nie zrozumiesz? Sam musisz pogłówkować. To są naprawdę proste podstawy. Nic wymyślnego. Możesz poczytać o bindowaniu (C# textbox bind) albo zrobić to krok po kroku prosto, żeby się nauczyć:

  1. Pobierz dane dotyczące wybranej zabawki z tabeli
  2. Przepisz wartości do odpowiednich textBoxów.

Cała robota. To przy założeniu prostszym. I od tego zacznij.
Skoro wziąłeś się za taką robotę, to zakładam, że umiesz już pobrać dane sqlem do data readera.

0

Dane z bazy pobierz do datatable. Następnie zrób klasę reprezentujaca item z listboxa i przypisz listę tych obiektów do listboxa. Zmień itemtemplate aby odpowiadał danym ktore chcesz wyświetlać.

0

Hmm.. dzięki za tipy, ale rzeczywiście może się okazać, że to co dla Was jest prostymi podstawami, dla mnie może być dość ciemną (może już nie czarną ale ciągle bardzo ciemną) magią. Wrócę do tego wątku, gdy zacznę pisać program. Myślę, że jeśli się uda to przy okazji zdobędę tonę wiedzy i nowego doświadczenia.

0

Dobra, po kolei. Umiesz pobrać dane z bazy danych?

0

Myślę, że dam radę - utworzę bazę danych, zrobię połączenie i wyświetlę ją w gridzie.

0

Tylko częściowo - zrobiłem ze dwa przykłady z tutoriali znalezionych w internecie i działa. Jednak sposobów i jest bardzo dużo - od plików, baz lokalnych tworzonych bezpośrenio w visualu, ADO. , odobnych dedykowanych klas - co tutorial to inna metoda. Moja wiedza nie jest duża, a raczej jeszcze ciągle bardzo mała i nie wiem, w którą stronę pójść i co Juhas dalej zaproponuje.

Potrafię zrobić connection do MS SQL, podpiąć pod przycisk i wyświetlić dane w gridzie.

0

Połączenie z bazą mySql:

 private static MySqlConnection DatabaseConnect()
        {
            string server = "",
                db = "",
                id = "",
                pass = "";
            string mojePolaczenie =
            "SERVER=" + server + ";" +
            "DATABASE=" + db + ";" +
            "UID=" + id + ";" +
            "PASSWORD=" + pass + ";";
            return new MySqlConnection(mojePolaczenie);
        }

Pobranie tabeli do DataTable i pobieranie wartości z DataTable. Od razu zapisywanie do listy obiektów z których będzie pobierał dane do wyświetlania DataGrid (WPF), ListBox lub cokolwiek tam.
https://4programmers.net/Pastebin/6393

To z mojego starego programu kod. Pamiętaj aby elementy Twojej listy (czyli te klasy) miały zaimplementowany interfejs INotyfyPropertyChanged.
Następnie zbinduj Liste ze swoim comboboxem (poczytaj o Bindingu)
Następnie Wejdź w itemTemplate swojego Comboboxa i zmień jego wygląd oraz funkcjonalność tak, aby wyświetlał to, co Ty chcesz (poczytaj o ItemTemplate, DataTemplate, Controltemplate)

0

U mnie to wygląda tak:

namespace SQLConnection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void btnPobierz_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection();
        con.ConnectionString = "data source = .; database = marcin_1; integrated security = SSPI";

        SqlCommand cmd = new SqlCommand("select * from dbo.testowa_2", con);
        con.Open();

        SqlDataReader DR = cmd.ExecuteReader();

        BindingSource source = new BindingSource();

        source.DataSource = DR;

        dataGridView1.DataSource = source;
        con.Close();
    }
}

}

Mam dane w gridzie, select wykonuje się po kliknięciu buttona.

Ale jak dane z tabeli widocznej w gridzie wsadzić do osobnych kontrolek?

0

Pobierz cala tabele do datatable. Spojrzałeś w ogóle na mój kod w linku?

0

Cześć,

jasne, że przeczytałem, tylko nie wiem, czy dobrze rozumiem:

int max = List.Count();
                for (int n = 0; n < dt.Rows.Count - max; ++n)
                {
                    DataRow row = dt.Rows[n];
                    int? iD = row[0] as int?;
                    int ID = int.Parse(iD.ToString());
                    string Message = row[1] as string;
                    string Date = row[2] as string;
                    string IP = row[3] as string;
                    int AccountID = int.Parse(row[4] as string);
                    List.Add(new cHistoryItem(ID, Message, Date, IP, AccountID));
                    //List.Insert(0, new cHistoryItem(ID, Message, Date, IP, AccountID));
                }

odpowiada po prostu za ładowanie danych z tabelki z bazy do tabeli? Czy jest inaczej.

Na teraz w moim programik wygląda tak:
https://4programmers.net/Pastebin/6395

Działa podłączenie do bazy, pobranie danych do grida, combobox - mogę wybrać nazwisko z listy i w gridzie pojawią się dane, texbox i button - mogę wpisać pesel i po naciśnięciu buttona w gridzie pojawią się dane.

Czy mam zamienić DataSet na DataTable? Czy napisać zupełnie nową metodę? A tamto zostawić jak jest na potrzeby Grida? Ciągle niewiele rozumiem...

0

Ty, no przecież tu już masz całą robotę załatwioną (ch..owo, bo ch...owo, ale jest), więc w czym problem?

0

Nie ma, a przynajmniej nie było, danych w kontrolkach (textbox). W międzyczasie udało mi się jedną kontrolkę zrobić i do niej zapakować jedną kolumnę i działa! Jest chyba jeszcze bardziej ch..owo, a połowa kodu jest niepotrzebna, ale działa - komórka jest i dane w niej też się pojawiają właściwe.

Kod tutaj: https://4programmers.net/Pastebin/6396

Czy w podobny sposób jak wkładam dane do kontrolki mogę włożyć je do zmiennej? Po to, żeby bez edycji bazy robić na nich jakieś operacje w pamięci aplikacji? Czy na to jest jakaś inna metoda?

0

Cześć,

mam jeszcze parę pytań, problemów i nie mogę znaleźć informacji jak je rozwiązać - może ktoś z Was naprowadzi jak to zrobić, albo gdzie szukać wiedzy :)

  1. do comboboxa pobieram dane przez polecenie select distinct i to działa gdy mam jednego comboboxa - dane się w nim nie powtarzają - ale jak to zrobić, gdy chcę do filtrowania użyć więcej niż jednego combo? Załóżmy że chcę filtrować po imieniu, nazwisku, mieście, kraju - jeśli użyję jednego selecta to w combo z imionami mam powielające się wartości (distinct działa dla całego wiersza z tabeli). Czy mogę dla każdego combo użyć osobnego zapytania do bazy? czy nie za wiele będzie tych odpytań?

  2. jak zrobić walidację między comboboxami? To znaczy jeśli wybiorę jakieś imię z pierwszego, to w drugim żeby pokazały się jedynie nazwiska, które dla wybranego imienia występują, i tak dalej. No i jak to się ma do pkt1? Odpada osobne zapytanie do każdego combo?

Kopię w necie i nic nie mogę wykopać...

0

Twój problem wynika z tego że ładujesz do kontrolek bezpośrednio to co pobrałeś z bazy. Rozdziel to co jest w formatce od tego na czym operujesz i co pobierasz z bazy danych.

0

i20918 dzięki za odpowiedź, ale nie bardzo wiem jak to zrobić - to moje pierwsze kroki w programowaniu :/ Podpowiesz coś więcej?

1

Jak to Twoje pierwsze kroki, to polecam Ci zacząć programowanie kilka szczebli niżej. Serio. Fajnie, że SQL, że baza danych itd. Ale nie ogarniasz najbardziej podstawowych rzeczy. Porzuć ten projekt teraz i zajmij się czymś podstawowym. Na początek napisz coś w rodzaju Windowsowego Notatnika. Serio.

0

Ja zdaję sobie sprawę z tego, że uczę się nieefektywnie - niestety nie bardzo wiem jak tą naukę prowadzić. Szkoła również nie pomaga - jestem na studiach informatycznych, ale tam to się na bank niewiele nauczę (mogliby przynajmniej uczyć, jak się uczyć programować). W sieci jest dużo poradników, tutoriali itp, ale z reguły to poradniki do konkretnych funkcjonalności - nie mogę znaleźć takiego jakiegoś kursu, który szedłby szczeblami w jakiś fajny sposób. A może źle szukam?

Może polecicie jakiś kurs (najchętniej youtube)? Może być po polsku bądź po angielsku - byle nie wietnamski, od którego warto zacząć?

Mam spore problemy z działaniem na klasach, funkcjach, metodach... Te najprostsze z pozoru rzeczy sprawiają mi dużo problemu, bo stosuję je często bez zrozumienia.

Z góry dzięki.

0

Powiedziałem Ci - napisz Windowsowy Notatnik. Jak chcesz, żebym Cię poprowadził, to daj znać na priv.

1 użytkowników online, w tym zalogowanych: 0, gości: 1