aktulizacja listy bez butona odśwież

0

W jaki sposób dodając klienta w jednej formie, została lista klientów zaktualizowana w drugiej formie aby się tam pojawił bez konieczności użycia przycisku odśwież?

Próbowałem w butonie formy gdzie dodaję klienta uruchomić metodę która ładuję listę klientów z głównej formie jednak to nie działa. Nie mam pomysłu gdzie powinienem tę metodę wywołać aby lista została odświeżona bez konieczności klikania w odśwież.

0

Tworzysz formę.
Dodajesz właściwość (np.):
public string Username { get; private set;}

 
using(MojForm form = new MojForm)
{
    DialogResult result = form.ShowDialog();
    if(result == DialogResult.OK)
        listaUzytkownikow.Add(form.Username);
}

Kod pisany z palca. Mogą być błędy

0

Oczywiście na zamknięciu swojego formularza musisz ustawić Username i DialogResult na OK

0

Próbowałem tym sposobem ale mam jakiś problem z comboboxem.

Mam główną formę "Start" w której do comboboxa ładowana jest lista klientów metodą public void zaladuj_combobox_danymi_klientow().
Na niej mam butona Dodaj klienta który wywołuje nową formę "Klient" w której wpisuję dane klienta. Po dodaniu klienta ma się on pojawić na głównej formie Start w comboboxie załadowany z bazy danych.

0

Wrzuć kod

0

Forma Start. Tutaj sobie klientów ładuję wywołując te metodę w 'public start();'

 public void zaladuj_combobox_danymi_klientow() //metoda ktora ładuje dane klientów do comboboxa
        {
            connStart();
            string szukaj_klienta = "SELECT id_klienta, CONCAT_WS(' ',`nazwisko_nazwa`,`imie`, `ulica`,`nr`) from `klienci` order by `nazwisko_nazwa`";
            //polecenie sql do mysql które łaczy wynik z dwóch kolumn w jedną 

            MySqlCommand cmd = new MySqlCommand(szukaj_klienta, conn);
            MySqlDataReader reader = cmd.ExecuteReader();

            comboBox_klient.Items.Clear();

            while (reader.Read())
            {        comboBox_klient.Items.Add(reader[1].ToString());     }

            reader.Close();
            conn.Close();


         

             }

mam drugą formę nowy_klient gdzie dodaję dane ale nie są ładowane do tego comboboxa

0

nie ogarniam tego, z kod zmienna 'listaUzytkownikow' ?
Gdzie i jak mam zmodyfikować ten kod?

using(MojForm form = new MojForm)
{
    DialogResult result = form.ShowDialog();
    if(result == DialogResult.OK)
        listaUzytkownikow.Add(form.Username);
}

Próbowałem to robić ale po mojemu nie działa, nie orientuje sie w tym co i jak;/

0

Czyli w nowym oknie robisz insert?
no to musisz zamiast:
listaUzytkownikow.Add(form.Username);
napisać:
comboBox_klient.Items.Add(form.Username);

gdzie form.Username powinieneś przypisać to co przekazujesz w insert

0

Tak w nowym ale nie o to mi chodzi chyba. Chodzi o to, że w form2 po kliknięciu buttona, który wprowadzi dane do bazy mysql wywołać również metodę z form1 gdzie mam comboboxa w którym załadowani są wszyscy klienci z tabeli bazy danych. Metoda ta ładowała by na nowo wszystkich klinów do comboboxa i ten nowo dodany klient pojawił by się.

Tą metodę chcę wywołać w form2, w comboboxie wyświetlam tylko nazwisko, imie, ulice i nr w sposób ciągły - w insercie w nowym oknie dodaję wiele innych danych.

 public void zaladuj_combobox_danymi_klientow() //metoda ktora ładuje dane klientów do comboboxa
        {
            connStart();
            string szukaj_klienta = "SELECT id_klienta, CONCAT_WS(' ',`nazwisko_nazwa`,`imie`, `ulica`,`nr`) from `klienci` order by `nazwisko_nazwa`";
            //polecenie sql do mysql które łaczy wynik z dwóch kolumn w jedną 
 
            MySqlCommand cmd = new MySqlCommand(szukaj_klienta, conn);
            MySqlDataReader reader = cmd.ExecuteReader();
 
            comboBox_klient.Items.Clear();
 
            while (reader.Read())
            {        comboBox_klient.Items.Add(reader[1].ToString());     }
 
            reader.Close();
            conn.Close();
 
 
 
 
             }
0

Jeśli rozumiem o co chodzi to robisz tak:
(kod z palca)

public class MojForm : Form
{

public event EventHandler DataUpdated;

void btnDodaj_Click(object sender, EventArgs args)
{
if(DataUpdated != null)
DataUpdated(this, null);
}
}

następnie w klasie gdzie masz metodę do pobrania danych i wywołanie formy:

 

void pokazFormeMojForm()
{
MojForm form = new MojForm();
form.DataUpdated += new EventHandler(aktualizuj);
form.ShowDialog();

}

void aktualizuj(object sender, EventArgs args)
{
// tu wywołaj swoja metode do pobrania danych
}

0

Działa. Bardzo dziękuję.

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