SsawMedlem sedan mars 20011 880 inlägg Hur laddar jag en treeview i C#?
Jag har försökt så här:
private void treeViewFyllAlbum()
{
//
treeView1.Nodes.Clear();
string kolumn = listBoxFyllTitlar.SelectedItem.ToString();
string SQLstring ="SELECT t_Album.CD_ID, t_Album.Album As
Albumet " +
" FROM t_Album INNER JOIN t_SongTitlar " +
" ON t_Album.CD_ID = t_SongTitlar.Album" +
" WHERE t_SongTitlar.songtitel = '" + kolumn + "'";
//
da1 = new OleDbDataAdapter(SQLstring, con);
ds1 = new DataSet("frånAlbum");
try
{
con.Close();
con.Open();
da1.Fill(ds1,"frånAlbum");
con.Close();
treeView1.ImageIndex=0;
string strAlbum =ds1.Tables["frånAlbum"].Rows[0]
["Albumet"].ToString();
treeView1.Nodes.Add(strAlbum);
label1.Text="Aktuell Titel: " + listBoxFyllTitlar.Text + " Album: " + strAlbum;
SQLstring ="SELECT t_SongTitlar.ArrNo, t_SongTitlar.songtitel As Song " +
" FROM t_Album INNER JOIN t_SongTitlar ON t_Album.CD_ID =
t_SongTitlar.Album " +
" WHERE t_Album.Album = '" + strAlbum + "'";
da1 = new OleDbDataAdapter(SQLstring, con);
ds1 = new DataSet("frånAlbum");
con.Close();
con.Open();
da1.Fill(ds1,"frånAlbumTitel");
con.Close();
int rader = ds1.Tables["frånAlbumTitel"].Rows.Count;
nr = new String[rader];
for(int a = 0;a < rader; a++)
{
treeView1.Nodes.Add
(ds1.Tables["frånAlbumTitel"].Rows[a]["Song"].ToString());
nr[a] = ds1.Tables["frånAlbumTitel"].Rows[a]["Song"].ToString();
}
}
catch(Exception fel)
{
MessageBox.Show(fel.Message,"Databasfel");
}
}
I roten skall "Albumet" finnas.
I noderna "songtitlar", men när jag gör så här så är ju "allt" i roten.
Hur bör man göra?
Jag har tittat runt, men inte hittat någonting som hjälpt mig.
:q
NnikoMedlem sedan juni 20022 599 inlägg treeView1.Nodes.Add(strAlbum);
// osv
for(int a = 0;a < rader; a++)
{
treeView1.Nodes[0].Nodes.Add
(ds1.Tables["frånAlbumTitel"].Rows[a]["Song"].ToString());
nr[a] = ds1.Tables["frånAlbumTitel"].Rows[a]["Song"].ToString();
}
.. borde det bli, tycker jag. Du förstår principen?
SsawMedlem sedan mars 20011 880 inlägg Du är kanon, och otroligt snabb.
Två snabbfrågor.
Hur gör jag för att den skall vara "öppen"(slippa klicka) när jag startar?
[treeView1.ExpandAll(); fungerar inte)
Som du såg så hänvisade jag till treeView1.ImageIndex=0;
Lite senare i kodan lade jag till treeView1.ImageIndex=1; för att få iconerna i noderna.
Men när jag klicka så byter iconerna plats...
Vad tror du??
NnikoMedlem sedan juni 20022 599 inlägg
Hur gör jag för att den skall vara "öppen"(slippa klicka) när jag startar?
treeView1.ExpandAll()
.. när allt är inlagt.
Men när jag klicka så byter iconerna plats...
Är lite osäker men jag har en kod där jag gör motsvarande så här:
System.Windows.Forms.TreeNode oNode = New System.Windows.Forms.TreeNode();
oNode.ImageIndex = 0
oNode.SelectedImageIndex = 0
oNode.Text =strAlbum;
treeView1.Nodes.Add(oNode);
//osv
for(int a = 0;a < rader; a++)
{
System.Windows.Forms.TreeNode oTmpNode = New System.Windows.Forms.TreeNode();
oTmpNode.ImageIndex = 1
oTmpNode.SelectedImageIndex = 1
oTmpNode.Text=ds1.Tables["frånAlbumTitel"].Rows[a]["Song"].ToString();
treeView1.Nodes[0].Nodes.Add(oTmpNode);
nr[a] = ds1.Tables["frånAlbumTitel"].Rows[a]["Song"].ToString();
}
och då stannar ikonerna kvar. (Ta isåf bort treeView1.ImageIndex=0 och treeView1.ImageIndex=1)
SsawMedlem sedan mars 20011 880 inlägg Det fungerar helt underbart. Exact som jag ville ha det.
En tillägsfråga(det är det alltid) går det lätt att ändra iconen för rotnoden om den uppfyller vissa vilkor?
NnikoMedlem sedan juni 20022 599 inlägg Visst. Ikonerna för alla noder kan ändras under run-time.
För toppnoden:
if (<villkor>)
{
treeView1.Nodes[0].ImageIndex = i
treeView1.Nodes[0].SelectedImageIndex= j
}
SsawMedlem sedan mars 20011 880 inlägg Varifrån får du i resp j?
NnikoMedlem sedan juni 20022 599 inlägg Ingenstans. Det var bara exempel. Du får ersätta dem med de index i imagelisten som du vill använda.