Windows Forms VB.NET - Remplir TreeView avec des données Hiérarchiques
Aloha,
Je suis en train de remplir un treeview sur un formulaire windows app avec Hiérarchique des données à partir de SQL db.
La structure de la base de données est:
id_def id_parent description
1 NULL Multidificiência
2 NULL Síndrome
3 NULL Outros
4 1 Surdez de Transmissão
5 2 Surdez Neurossensorial Ligeira
6 3 Surdez Neurossensorial Média
les enregistrements avec la valeur NULL à id_parent, sont les catégories principales, et celles avec leurs id_parent, sont des sous-catégories.
N'importe qui peut aider avec le code pour remplir le TreeView ?
J'ai réussi à le faire avec une ASP.NET app, si cela peut aider, voici le code:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
PopulateRootLevel();
}
private void PopulateRootLevel()
{
SqlConnection objConn = new SqlConnection("Data Source=1.1.1.1;Initial Catalog=DREER_EDUCANDOS2006;User ID=sre_web;Password=xxx");
SqlCommand objCommand = new SqlCommand("select id_deficiencia,descricao,(select count(*) FROM NecessidadesEspeciais WHERE id_deficiencia_pai=sc.id_deficiencia) childnodecount FROM NecessidadesEspeciais sc where id_deficiencia_pai IS NULL", objConn);
SqlDataAdapter da = new SqlDataAdapter(objCommand);
DataTable dt = new DataTable();
da.Fill(dt);
PopulateNodes(dt, TreeView1.Nodes);
}
private void PopulateSubLevel(int parentid, TreeNode parentNode)
{
SqlConnection objConn = new SqlConnection("Data Source=1.1.1.1;Initial Catalog=DREER_EDUCANDOS2006;User ID=sre_web;Password=xxx");
SqlCommand objCommand = new SqlCommand("select id_deficiencia,descricao,(select count(*) FROM NecessidadesEspeciais WHERE id_deficiencia_pai=sc.id_deficiencia) childnodecount FROM NecessidadesEspeciais sc where id_deficiencia_pai=@id_deficiencia_pai", objConn);
objCommand.Parameters.Add("@id_deficiencia_pai", SqlDbType.Int).Value = parentid;
SqlDataAdapter da = new SqlDataAdapter(objCommand);
DataTable dt = new DataTable();
da.Fill(dt);
PopulateNodes(dt, parentNode.ChildNodes);
}
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
}
private void PopulateNodes(DataTable dt, TreeNodeCollection nodes)
{
foreach (DataRow dr in dt.Rows)
{
TreeNode tn = new TreeNode();
tn.Text = dr["descricao"].ToString();
tn.Value = dr["id_deficiencia"].ToString();
nodes.Add(tn);
//If node has child nodes, then enable on-demand populating
tn.PopulateOnDemand = ((int)(dr["childnodecount"]) > 0);
}
}
- Remarque assurez-vous exactement quel est ton problème. Est-il quelque chose comme ce que vous cherchez (remplissage d'une winforms treeview "à la demande", C# exemple): stackoverflow.com/questions/1851729/...
- Tack för ditt svar fredrik =) si u prendre un coup d'oeil ici: aspalliance.com/... c'est exactement ce que je fais semblant, mais pour windows form.
- Je suis impressionné 🙂 Brièvement vérifié l'article, elle ressemble à ma réponse à cette question devrait faire l'affaire pour vous. Il convertit VB.NET plutôt bien à l'aide de ce convertisseur: developerfusion.com/tools/convert/csharp-to-vb La seule chose qui n'est pas tout à fait, le multi-ligne lambda à l'intérieur de la QueueUserWorkItem, mais je suppose que ça pourrait être extraite d'une méthode distincte pour résoudre le problème.
- Ma copine est suédoise =) je vais laisser u savoir si j'ai réussi à le résoudre, merci pour l'aide. cheers
- De toute façon cela est lié à asp.net et c# ne pas vb.net
- Désolé
- désolé frank, je suis bloqué la mise en œuvre de votre exemple de code dans ma solution. c'est exactement le genre de tableau que j'ai stackoverflow.com/questions/38801/... je veux le remplir dans un formulaire windows treeview. C'est principalement ça. Je vous serais très reconnaissant si vous pourriez m'aider.
Vous devez vous connecter pour publier un commentaire.
Prendre une table avec des données hiérarchiques à l'intérieur:
J'ai retravaillé les exemples de code à partir de l'autre AFIN de répondre à, utiliser le tableau ci-dessus pour remplir dynamiquement une arborescence (en supposant que le tableau de la vie dans une base de données SQL server). L'exemple de code est un peu lenghty...
La récupération de données de code peut probablement être fait un peu plus joli en utilisant Linq-to-SQL, mais je voulais la même chose pour être aussi complet que possible, j'ai donc décidé de quitter que pour conserver la quantité de code vers le bas... (qui nécessiterait l'inclusion de certains généré Linq-to-SQL classes).
"dummy"
affecté à laTag
de la propriété. Le "vrai" nœuds ont leDataNode
qu'ils représentent dans leTag
de la propriété. De sorte que vous pouvez lancerTag
àDataNode
et obtenir l'Id à partir de là:MessageBox.Show(treeView1.SelectedNode.Text + (treeView1.SelectedNode.Tag as DataNode).Id.ToString());