簡體   English   中英

從Access數據庫填充Treeview

[英]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;
}

我看到兩件事會阻止代碼正常工作:

  1. TreeNode.Tag是一個對象,不能拆分。 您首先需要使用ToString()將其轉換為字符串。

  2. split函數需要一個字符作為其參數。 您正在提供一個字符串。 使用.Split('=')代替.Split(“ =”)。

如果您將將標簽分割的行更改為:

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

它應該工作正常。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM