Aloha, J'essaie de remplir une vue arborescente sur une application Windows avec des données hiérarchiques à partir d'une base de données SQL.Windows Forms VB.NET - Remplir TreeView avec des données hiérarchiques
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 principales catégories et celles qui ont leur id_parent, sont des sous catégories.
Quelqu'un peut-il aider avec le code pour remplir le TreeView? Je réussi à le faire avec une application ASP.NET, si elle aide, 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 [email protected]_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);
}
}
Notez exactement quel est votre problème. Est-ce quelque chose comme ça que vous recherchez (peupler une winviews treeview "à la demande", exemple C# si): http://stackoverflow.com/questions/1851729/treeview-child-node-populating-problem/1851789#1851789 –
Si vous jetez un oeil ici: http://aspalliance.com/732_Display_Hierarchical_Data_with_TreeView_in_ASPNET_20 c'est exactement ce que je prétends, mais pour Windows forme. –
@Rui: Je suis impressionné :) Brièvement vérifié l'article; il semble que ma réponse à cette autre question devrait faire l'affaire pour vous. Il convertit plutôt bien en VB.NET en utilisant ce convertisseur: http://www.developerfusion.com/tools/convert/csharp-to-vb/ La seule chose qui ne marche pas est le lambda multi-ligne dans le QueueUserWorkItem , mais je suppose que cela pourrait être extrait d'une méthode distincte pour résoudre le problème. –