[英]Populating a Treeview from an Access database
我正在嘗試從Access數據庫表填充Treeview。
這個想法是將省作為父節點,然后將城市作為子節點,然后將郊區作為該子節點的子節點。
我已經有了一些代碼,但是arrParentType = nParent.Tag.Split("=");
不會工作,我不知道為什么。
有沒有人可以幫助我解決這個問題?
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;
}
我看到兩件事會阻止代碼正常工作:
TreeNode.Tag是一個對象,不能拆分。 您首先需要使用ToString()將其轉換為字符串。
split函數需要一個字符作為其參數。 您正在提供一個字符串。 使用.Split('=')代替.Split(“ =”)。
如果您將將標簽分割的行更改為:
arrParentType = nParent.Tag.ToString().Split('=');
它應該工作正常。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.