Avatar
Vít Ježek
Člen
Avatar
Vít Ježek:

Ahoj, možná drobnost. Mám aplikaci WPF C#.
Jedno základní okno v kterém je datagrid, textbox, textblock. V těch mám napojená data z databáze (o uživatelích). To je OK.
Pak mám vytvořené nové okno přes Button -> v novém okně zadám informace o uživateli (jméno apod..) -> tam po kliknutí na Button vložím nově získané informace do databáze. Také OK.
Problém je po zavření druhého okna (kde se vkládají nové hodnoty) a přechodu na hlavní okno s celkovým seznamem uživatelů. Nedaří se mi ani datagrid, ani textbox/textblock aktualizovat o nově vytvořená data. Jediná možnost je restartovat program. Pak tam jsou.
V hlavním okně mám vytvořenou metodu

public void BindGrid()

kde mám funkční kód pro vložení dat. Ze druhého okna (kde zadávám nová data) volám

HlavniOkno hlavniOkno = new HlavniOkno();
hlavniOkno.BindGrid();

Jo a všechno má stejný namespace
Nějaký nápad?

 
Odpovědět 26. března 23:50
Avatar
Odpovídá na Vít Ježek
Michal Štěpánek:

Můžeš si třeba poslat do toho druhého okna instanci toho hlavního a po uložení nového záznamu spustit "znovunaplnění" gridu v hlavním okně...

Nahoru Odpovědět 27. března 12:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Vít Ježek
Michal Štěpánek:

Já to obecně páchám takto:
V příslušné třídě naplním ObservableCollec­tion daty z databáze
V hlavním okně vytvořím třeba

public void NactiData()
{
//zde je příkaz třídě, aby naplnila kolekci
trida.naplnkolekci();
DataGrid.DataContext = trida;
}

přes binding naplním DataGrid tou kolekcí z třídy
Do "ukládacího" okna si pošlu instanci hlavního okna (kde mám ten DataGrid), to si otevírám jako dialog. Tím pádem mohu spustit ten "public void" z hlavního okna a před uzavřením tohoto okna spustím naplnění DataGridu v tom hlavním okně...
Nevím jestli je to nejideálnější řešení, ale jiné zatím neumím...

Editováno 27. března 12:39
Nahoru Odpovědět 27. března 12:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Vít Ježek
Člen
Avatar
Vít Ježek:

To by mohlo fungovat. Jen se optám, jak spustíš v hlavním okně to druhé okno?

DruheOkno druheokno = new DruheOkno();
druheOkno.ShowDialog();

?
A jakou hlavičku vytvoříš v druhém okně?

public DruheOkno()
{
InitializeComponent();
.....

?

 
Nahoru Odpovědět 27. března 23:14
Avatar
Odpovídá na Vít Ježek
Michal Štěpánek:
DruheOkno druheokno = new DruheOkno(this);
druheOkno.ShowDialog();

druhé okno

private HlavniOkno form;
Public DruheOkno(HlavniOkno instance)
{
InitializeComponent();
this.form = instance;
}

a pak v tom DruheOkno můžu spustit akci z hlavního okna

this.form.NejakaAkce();
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 27. března 23:46
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Vít Ježek
Člen
Avatar
Vít Ježek:

Tak nemohu říct, že to nefunguje :-)
Jen (ač nemám ponětí proč) se DataGrid někdy aktualizujE a někdy zase ne.
Každopádně tvé řešení je řešení, jen musím ještě někde vychytat chybičku.
Díky

 
Nahoru Odpovědět 29. března 18:00
Avatar
Odpovídá na Vít Ježek
Michal Štěpánek:

Nevím, z čeho plníš ten DataGrid, ale pokud např. z ObservableCollec­tion jako já, tak ji nezapomeň vždycky před naplněním vyprázdnit, jinak se aktualizované záznamy jakoby "připíšou" za již načtená data a v DataGridu se na první pohled nic nezmění, ale data se zobrazí, resp. přidají znovu na konci...

Nahoru Odpovědět 29. března 21:41
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Vít Ježek
Člen
Avatar
Vít Ježek:

K naplnění DataGridu používám

OleDbCommand cmd = new OleDbCommand();
if (con.State != ConnectionState.Open)
    con.Open();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM [Osoby] ORDER BY Prijmeni ASC";
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
dt = new DataTable();
da.Fill(dt);
DataGridOsoby.ItemsSource = dt.AsDataView();

Problém s duplicitou dat při načtení nového seznamu (i bez vyprázdnění) nemám. Je tam vždy jen jeden seznam.

Pořád zkouším přijít proč se někdy aktualizuje a jindy ne, ale ne a ne na to přijít. Každopádně pokud na to příjdu, tak dám vědět. I kdyby pro zajímavost.

 
Nahoru Odpovědět 29. března 22:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.