Pobranie danych z bazy(MySql) i wyświetlenie w DataGridView

0

Witam
zaczynam dopiero podstawy C#
W moim GUI posiadam TabControlTasks i w każdym mam DataGridView,
więc jest to takie przełączanie między tabelami z bazy.
Znalazłem kod, pobiera on dane tylko gdy się kliknie w przycisk.
Chciałbym by moje dane wyświetlało od razu po przełączeniu między zakładkami bez konieczności klikania dodatkowego w przyscik.
Zapewne sprawa jest prosta, ale nie wiem jak dla danego DataGridView przypisać określony kod do wyświetlenia.

private void button1_Click(object sender, EventArgs e)
        {
          string constring="datasource=localhost;port=;username=root;password=;";
           MySqlConnection conDataBase = new MySqlConnection(constring);
            MySqlCommand cmdDataBase=new MySqlCommand("select * from ekstra_testy.pilkarze ;",conDataBase);
                try{
                    MySqlDataAdapter sda = new MySqlDataAdapter();
                    sda.SelectCommand = cmdDataBase;
                    DataTable dbdataset = new DataTable();
                    sda.Fill(dbdataset);
                    BindingSource bSource = new BindingSource();

                    bSource.DataSource = dbdataset;
                    dataGridView1.DataSource = bSource;
                    sda.Update(dbdataset);
                }catch(Exception ex)
                {
                        MessageBox.Show(ex.Message);
                    }
        } 
2

Podepnij kod pod event SelectedIndexChanged kontrolki TabControl. Jak sama nazwa wskazuje event jest odpalany za każdym razem kiedy zmieni się indeks aktualnie aktywnej zakładki. Wystarczy że sprawdzisz SelectedIndex i będziesz wiedział co wywołać żeby wyświetlić dane z konkretnej tabeli.

0

Dzięki działa, tylko troszkę nie do końca
tabela pojawia się dopiero gdy przełączę kartę( nie od razu na wejściu) potrzebny jest ruch do wywołania/pokazania tabeli
zapewne chodzi o ten indeks gdy się zmieni,
Chyba że tu coś nie tak zrobiłem:

 private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            {
                string constring = "datasource=localhost;port=;username=root;password=;";
                MySqlConnection conDataBase = new MySqlConnection(constring);
                MySqlCommand cmdDataBase = new MySqlCommand("select * from ekstra_testy.pilkarze ;", conDataBase);
                
                    MySqlDataAdapter sda = new MySqlDataAdapter();
                    sda.SelectCommand = cmdDataBase;
                    DataTable dbdataset = new DataTable();
                    sda.Fill(dbdataset);
                    BindingSource bSource = new BindingSource();

                    bSource.DataSource = dbdataset;
                    dataGridView1.DataSource = bSource;
                    sda.Update(dbdataset);
               
            }

            {
                string constring = "datasource=localhost;port=;username=root;password=;";
                MySqlConnection conDataBase = new MySqlConnection(constring);
                MySqlCommand cmdDataBase = new MySqlCommand("select * from ekstra_testy.pilkarze ;", conDataBase);

                MySqlDataAdapter sda = new MySqlDataAdapter();
                sda.SelectCommand = cmdDataBase;
                DataTable dbdataset = new DataTable();
                sda.Fill(dbdataset);
                BindingSource bSource = new BindingSource();

                bSource.DataSource = dbdataset;
                dataGridView2.DataSource = bSource;
                sda.Update(dbdataset);

            }
1

To akurat proste. Event odpalany jest jak sam napisałeś tylko podczas zmiany zakładki. Podczas wyświetlenia okna taki event nie ma miejsca. Najprostszym rozwiązaniem będzie manualne wywołanie Twojego handler'a w konstruktorze klasy bądź w handlerze Form.OnLoad:

 tabControl1_SelectedIndexChanged(null, EventArgs.Empty) 

Jednakże to dobry czas żebyś zaczął stosować odpowiednie konwencje i dobre praktyki programowania. Proponuję podzielić kod odpowiedzialny za ładowanie konkretnej tabeli do oddzielnej metody i wtedy np. przywołać metodę LoadTable1() zamiast handlera tabControl1_SelectedIndexChanged. Również Twój kod odpowiedzialny za łączenie się z bazą można zapisać prościej, umieść go w oddzielnej metodzie i bazując na jakimś parametrze (np. string lub enum na którym możesz użyć switch'a) wyciągnij dane z odpowiedniej tabeli.

0

Super, dzięki za pomoc i porady :)

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