Prosím o radu s DataGridView   otázka

VB.NET, ADO.NET, WinForms, Databáze

Mám konstrukci:

DGW1.DataSource = Nothing
DS.Clear()
If Not CN.State = ConnectionState.Open Then
    CN.Open()
End If
DA = New OleDbDataAdapter(Sql, CN)
DA.Fill(DS, ComboBox1.Text)
DGW1.DataSource = DS.Tables(0)
CN.Close()

kde: DGW1 je DataGridView a ComboBox1.Text obsahuje název tabulky v databázi access, kde těch tabulek je víc (Chemikálie, Parfémy, Barvy, atd...).

Sql je definován v jiné části a je jednoduchý:

Sql = "SELECT * FROM Chemikálie ORDER BY Název ASC"

Po spuštění vše funguje a DataGrid se naplní daty z tabulky Chemikálie. Když však pomocí ComboBoxu změním tabulku třeba na "Parfémy", definuji nový Sql

Sql = "SELECT * FROM Parfémy ORDER BY Název ASC"

...a zavolám výše uvedený kód, DataGrid zůstane prázdný ačkoliv v tabulce data jsou. Kde může být chyba?

Také by mně zajímalo, co přesně znamená výraz:

DGW1.DataSource = DS.Tables(0)

jsou nějaké jiné možnosti a co znamená ten index 0, DS.Tables(0).

Moc děkuji za info

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Asi nejsem dostatečně fundovaný odovědět, ale třeba je můj názor správný. Taky v tom "plavu".

Já si myslím, že DGW1.DataSource = DS.Tables(0) říká, že má v DGW zobrazit první tabulku, která v DS je. "(0)" nahrazuje volání tabulky jménem.

Co se stane když tam zadáš DGW1.DataSource = DS.Tables(1) když vybereš druhou tabuku v tom Comboboxu?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

chybí tam

DGW1.DataBind()

ZK

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

No všiml jsem si jedné věci. Když jsem zjišťoval názvy tabulek v kódu (viz nahoře) pomocí příkazu DS.Tables(0).TableName, tak se mi ta postupně jak byly otevřeny přidávaly názvy jednotlivých tabulek. To znaměná, že dfataset asi obsahoval postupně všechny již jednou načtené tabulky. Pak by asi fungovalo, kdybych použil DS.Tables("Název tabulky"). Ale to jsem nezkoušel.

Říkal jsem si, že asi bude lepší, když všechny tabulky z datasetu vymažu a načtu jen tu jednu, kterou právě chci. Čili:

DGW1.DataSource = Nothing
DS.Tables.Clear()
If Not CN.State = ConnectionState.Open Then
  CN.Open()
End If
DA = New OleDbDataAdapter(Sql, CN)
DA.Fill(DS, ComboBox1.Text)
DGW1.DataSource = DS.Tables(0)
CN.Close()

Tohle funguje, DataGrid se naplné přesně tím, čím chci (tabulkou zvolenou v ComboBoxu1 a není potřeba použít DGW1.DataBind(), ale proč to tak je netuším. Kdyby byl nějaký český tutoriál, rád se přiučím :-)

Ale děkuji za diskusi...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback