2016-08-16 19 views
0

Ich versuche, eine Treeview aus einer Access-Datenbank-Tabelle zu füllen.Auffüllen einer Treeview aus einer Access-Datenbank

Die Idee ist, die Provinz als Elternknoten, dann die Stadt als Kindknoten, dann die Vorstadt als Kind zu diesem Kindknoten zu haben.

Ich habe diesen Code schon, aber arrParentType = nParent.Tag.Split("="); wird nicht funktionieren und ich weiß nicht warum.

Gibt es jemanden, der mir bei diesem Problem helfen kann?

void tvProvincesFill() 
{ 
    OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = E:\Users\Me\Documents\C# Projects\MyProject1\Data\database.accdb; Persist Security Info =False;"); 

    OleDbDataReader treeProvince; 
    OleDbCommand cmdSelectProvinces = new OleDbCommand(("SELECT Province.Province_Code, Province.Province_name " + ("FROM (Province) " + ("GROUP BY Province.Province_Code, Province.Province_name " + ("HAVING Province.Province_name<>\' \' " + "ORDER BY Province.Province_name")))), con); 
    if ((con.State != ConnectionState.Open)) 
    { 
     con.Open(); 
    } 

    treeView1.Nodes.Clear(); 
    treeProvince = cmdSelectProvinces.ExecuteReader(); 
    while (treeProvince.Read()) 
    { 
     TreeNode nProvince = new TreeNode(); 
     nProvince.Text = treeProvince["Province_name"].ToString(); 
     nProvince.Tag = ("Province_Code=" + treeProvince["Province_Code"].ToString()); 
     this.treeView1.Nodes.Add(nProvince); 
     tvProvincesLoadChildNodes(nProvince); 
     // Load City and suburb info for current province 
     nProvince = null; 
    } 

    // frmMain.lblProvince.BackColor = Color.Empty 
    treeProvince = null; 
    cmdSelectProvinces = null; 
} 

// Fill Provinces for Geographic Criteria 
void tvProvincesLoadChildNodes(TreeNode nParent) 
{ 
    // Load City and Suburb sub nodes for Provinces 
    string[] arrParentType; 
    arrParentType = nParent.Tag.Split("="); 
    if ((arrParentType[0] == "Province_Code")) 
    { 
     // Add City sub-nodes 
     OleDbDataReader drCities; 
     OleDbCommand cmdGetCities = new OleDbCommand(("SELECT Area_File.City " + ("FROM (Area_File) " + ("GROUP BY Area_File.City, Area_File.Province_Code " + ("HAVING Area_File.City<>\' \' AND Area_File.Province_Code=" 
         + (arrParentType[1] + " ORDER BY Area_File.City"))))), con); 
     drCities = cmdGetCities.ExecuteReader(); 
     while (drCities.Read()) 
     { 
      TreeNode nCity = new TreeNode(); 
      nCity.Text = drCities["City"].ToString(); 
      nCity.Tag = ("City=" + drCities["City"].ToString()); 
      nParent.Nodes.Add(nCity); 
      tvProvincesLoadChildNodes(nCity); 
      // Load Suburbs for current city node 
      nCity = null; 
     } 

     drCities = null; 
     cmdGetCities = null; 
    } 
    else if ((arrParentType[0] == "City")) 
    { 
     // Add Suburb sub-nodes 
     OleDbDataReader drSuburbs; 
     OleDbCommand cmdGetSuburbs = new OleDbCommand(("SELECT Area_File.Suburb " + ("FROM (Area_File) " + ("GROUP BY Area_File.Suburb, Area_File.City " + ("HAVING Area_File.Suburb<>\' \' AND Area_File.City=\'" 
         + (arrParentType[1] + ("\'" + " ORDER BY Area_File.Suburb")))))), con); 
     drSuburbs = cmdGetSuburbs.ExecuteReader(); 
     while (drSuburbs.Read()) 
     { 
      TreeNode nSuburb = new TreeNode(); 
      nSuburb.Text = drSuburbs["Suburb"].ToString(); 
      nSuburb.Tag = ("Suburb=" + drSuburbs["Suburb"].ToString()); 
      nParent.Nodes.Add(nSuburb); 
      nSuburb = null; 
     } 

     drSuburbs.Close(); 
     cmdGetSuburbs = null; 
    } 

    arrParentType = null; 
} 

Antwort

0

Ich sehe zwei Dinge, die den Code aus Arbeits verhindern würde:

  1. TreeNode.Tag ein Objekt und nicht aufgeteilt werden kann. Sie müssen es zunächst mithilfe von ToString() in einen String umwandeln.

  2. Die Split-Funktion benötigt ein Zeichen als Parameter. Sie liefern es mit einer Zeichenfolge. Verwenden Sie .Split ('=') anstelle von .Split ("=").

Wenn Sie die Zeile ändern, in dem Sie den Tag zu verteilen:

arrParentType = nParent.Tag.ToString().Split('='); 

Es sollte gut funktionieren.

Hoffe, das hilft.

Verwandte Themen