Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Načtení databáze do TreeView

C# .NET .NET (C# a Visual Basic) Načtení databáze do TreeView American English version English version

Aktivity (1)
Avatar
Maros2470
Člen
Avatar
Maros2470:31.7.2014 10:33

Zdravím všechny. Potřebuji poradit. Mám databázi, která obsahuje tři sloupce: Kategorie, Hodnocení a Recept. Databázi načítám do treeView. Problém je v tom, že se mi kategorie a hodnocení zobrazují několikrát. Potřeboval bych, aby se kategorie zobrazila jednou, pod ní hodnocení a pod ní recepty, které tam spadají. Můžete mi poradit? Mám to napsáno takto:

SqlCeCommand com = new SqlCeCommand("SELECT * FROM Recepty",cn);
           SqlCeDataReader dr = com.ExecuteReader();
           while (dr.Read())
           {
               TreeNode node = new TreeNode(dr["Kategorie"].ToString());
               node.Nodes.Add(dr["Hodnoceni"].ToString());
               node.Nodes[0].Nodes.Add(dr["ReceptJmeno"].ToString());
               seznamTreeView.Nodes.Add(node);
               progressBar.Visible = true;
               timer1.Enabled = true;
           }

Zobrazuje se mi to takto:

Editováno 31.7.2014 10:36
 
Odpovědět 31.7.2014 10:33
Avatar
Maros2470
Člen
Avatar
Maros2470:31.7.2014 10:38

Možná bude lépe vidět

 
Nahoru Odpovědět 31.7.2014 10:38
Avatar
Odpovídá na Maros2470
Michal Štěpánek:31.7.2014 13:04

Použij GROUP BY, to ti vybere položku pouze jednou...

Nahoru Odpovědět 31.7.2014 13:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
sadlomaslox25:31.7.2014 14:40

bud to grouby nebo to seskladat v tom cyklu (spravne by se to melo delat na presenteru, ale nepredpokladam ze mas MVP)

while (dr.Read())
{
    var categoy = seznamTreeView.Nodes.OfType<TreeNode>().FirstOrDefault(o => o.Text == dr["Kategorie"].ToString())
        ?? seznamTreeView.Nodes.Add(dr["Kategorie"].ToString());
    var subcat = categoy.Nodes.OfType<TreeNode>().FirstOrDefault(o => o.Text == dr["Hodnoceni"].ToString())
        ?? categoy.Nodes.Add(dr["Hodnoceni"].ToString());
    subcat.Nodes.Add(dr["ReceptJmeno"].ToString());

    progressBar.Visible = true;
    timer1.Enabled = true;
}

kod je napsane vicemene z hlavy takze snad to pujde, pripadne tam ale snad uvidis kde je problem a prepises to.

 
Nahoru Odpovědět 31.7.2014 14:40
Avatar
Maros2470
Člen
Avatar
Maros2470:1.8.2014 7:58

Díky za rady, už mi to funguje

 
Nahoru Odpovědět 1.8.2014 7:58
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 5 zpráv z 5.