我正在尝试从Access Database表中填充Treeview。
思路是将省作为父节点,然后将城市作为子节点,然后将郊区作为该子节点的子节点。
我已经有了一些代码,但是arrParentType = nParent.Tag.Split("=");
不能工作,我不知道为什么。
void tvProvincesFill()
{
OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = E:UsersMeDocumentsC# ProjectsMyProject1Datadatabase.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。标签是一个对象,不能分割。您需要首先使用ToString()将其强制转换为字符串。
-
split函数需要一个字符作为参数。你给它提供了一个字符串。使用。split('=')代替。split("=")。
如果你将分隔标签的行改为:
arrParentType = nParent.Tag.ToString().Split('=');
应该没问题。