0

このテーマで多くのスレッドを見つけましたが、すべてツリービューの作成とデータベースとの通信が1つのクラスにある状況に関するものです...これらを分離したかったので、取得したデータをツリービューに作成したいフォームに1つのクラスがあります他のクラスから。その他のクラスの「仕事」は、データベースと通信し、必要な場所にデータを渡すことだけです...フォーム付きの私のクラスは次のとおりです。

public Form1()
    {
        InitializeComponent();
    }

    //  on Form load
    private void Form1_Load(object sender, EventArgs e)
    {
        List<String> lista = DB.DatabaseBroker.GetSports();
        PopulateTreeView(lista);
    }

    private void PopulateTreeView(List<string> lista)
    {
        treeViewSports.Nodes.Clear();

        foreach (string s in lista)
        {
            treeViewSports.Nodes.Add(s);
        }
    }

...そしてここに私がデータを取得するクラスがあります:

static SqlConnection conn = new SqlConnection("Data Source=MLAD3N-PC\\SQLEXPRESS;Initial Catalog=DBSports;Integrated Security=True");

    public static List<String> GetSports()
    {
        DataTable dataTable = new DataTable();
        List<String> sports = new List<String>();

        SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM TableSport", conn);
        SDA.Fill(dataTable);

        if (dataTable.Rows.Count > 0)
        {
            foreach(DataRow drow in dataTable.Rows)
            {
                sports.Add(drow[1].ToString());
            }
        }
        return sports;
    }

これで、次のようなスポーツのツリービューが表示されます。 ここに画像の説明を入力

問題は、このツリービューにリーグを追加したいので、サッカーの下にサッカーのリーグを持つ子ノードがあることです。私のデータベースでは、リーグ テーブルにはスポーツ テーブルからの外部キーが含まれているため、私のスポーツ フットボールに sportID=1 がある場合、フットボールに対応する LeagueTable 内のすべてのリーグは外部キー sportID=1 になります。

私の質問は、どうすればデータベースから必要なリーグを取得し、それらをフットボール ノードの下に配置できますか?

4

1 に答える 1

0

最も簡単な方法は、"List" の代わりに何らかのツリー構造を GetSports() の戻り値として使用し、この構造にリーグまたはその他のより複雑な SQL クエリを入力することです。次に、この構造のデータを使用してツリービューを埋めます。

于 2013-09-14T06:33:10.693 に答える