C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#でツリービューを使用するには2


(過去ログ 104 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■62446 / inTopicNo.1)  C#でツリービューを使用するには2
  
□投稿者/ ネネイ (4回)-(2011/10/12(Wed) 11:23:49)

分類:[C#] 

http://bbs.wankuma.com/index.cgi?mode=al2&namber=62420
↑この続きです。


一度、解決したと思ったのですが、
TreeView3階層目以降の表示がうまく出来ないのですが、
どのようにしたらよいでしょうか?
よく考えていなくて、後だしのようで、すみません。

考え方等教えて頂ければ幸いです。


ID19の時、ParentIdの値1なので、ID1にぶら下がり、
ID20の時、ParentIdの値19なので、ID19にぶらさがると
いった具合にしたいのです。
階層は動的で、何階層にもなります。


ID20の時の処理がうまく表示されないです。

どなたかレスをお待ちしております。

可能であれば、このコードを活用できればと思いました。
宜しくお願いします。

-------------------------------------------------
実際はmdb、テーブルを使用:Index_ 

ID    Name   Level_  Vno   ParentId  Children_
16  たた   1       1      -1         -1
 1    ああ    1       1       0          0
18  つつ    1       2      -1          0
 4  ええ    1       2       0          0
11  ささ    1       3      0         0
12  しし    1       4       0          0
 2    いい  2     1       1         -1      
 5  おお   2       1       4         -1
10  ここ   2       1      11         -1
13  すす    2       1      12         -1
 6  かか   2       2       4         -1
 3  うう  2       2       1         -1       
 7  きき    2       3       4         -1
15  そそ    2       3      12         -1
19  てて    2       3       1          0  
 8  くく   2       4       4         -1
17  ちち    2       4      12         -1
 9  けけ    2       5       4         -1
14  せせ    2       6      12         -1
20  とと    3       1      19          0  ★これが登録出来ません。

-------------------------------------------------

        private DataTable dt;
        private void Form1_Load(object sender, EventArgs e)
        {
            dt = new DataTable("Index_");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Level_", typeof(int));
            dt.Columns.Add("Vno", typeof(int));
            dt.Columns.Add("ParentId", typeof(int));
            dt.Columns.Add("Children_", typeof(int));

            dt.Rows.Add(16, "たた", 1, 1, -1, -1);
            dt.Rows.Add(1, "ああ", 1, 1, 0, 0);
            dt.Rows.Add(18, "つつ", 1, 2, -1, 0);
            dt.Rows.Add(4, "ええ", 1, 2, 0, 0);
            dt.Rows.Add(11, "ささ", 1, 3, 0, 0);
            dt.Rows.Add(12, "しし", 1, 4, 0, 0);
            dt.Rows.Add(2, "いい", 2, 1, 1, -1);
            dt.Rows.Add(5, "おお", 2, 1, 4, -1);
            dt.Rows.Add(10, "ここ", 2, 1, 11, -1);
            dt.Rows.Add(13, "すす", 2, 1, 12, -1);
            dt.Rows.Add(6, "かか", 2, 2, 4, -1);
            dt.Rows.Add(3, "うう", 2, 2, 1, -1);
            dt.Rows.Add(7, "きき", 2, 3, 4, -1);
            dt.Rows.Add(15, "そそ", 2, 3, 12, -1);
            dt.Rows.Add(19, "てて", 2, 3, 1, 0);
            dt.Rows.Add(8, "くく", 2, 4, 4, -1);
            dt.Rows.Add(17, "ちち", 2, 4, 12, -1);
            dt.Rows.Add(9, "けけ", 2, 5, 4, -1);
            dt.Rows.Add(14, "せせ", 2, 6, 12, -1);
            ///dt.Rows.Add(20, "とと", 3, 1, 19, 0);   ★これが登録出来ません。
            
            dataGridView1.DataSource = dt;
        
        }
      

        private void button1_Click(object sender, EventArgs e)
        {
            int ParentId, Children, Id;
            string SE = "";
            Dictionary<int, TreeNode> dic = new Dictionary<int, TreeNode>();
            TreeNode pnd;
            ///親ノード
            TreeNode 情報 = new TreeNode("情報");

            treeView1.Nodes.Clear();
            treeView1.Nodes.Add(情報);

            foreach (DataRow row in dt.Rows)

            {
                if ((int)row["ParentId"] != -1)
                {
                    ParentId = (int)row["ParentId"];
                    Children = (int)row["Children_"];

                    if (ParentId == 0 && Children == 0)
                    {
                        ///子ノード
                        SE = (string)row["Name"];
                        TreeNode ko = new TreeNode(SE);
                        情報.Nodes.Add(ko);

                        Id = (int)row["ID"];
                        dic.Add((Id), ko);
                    }
                    else
                    {
                        pnd = dic[ParentId];
                        ///孫ノード
                        if (Children == 0)
                        {
                            SE = (string)row["Name"];
                            TreeNode Mago = new TreeNode(SE);
                            pnd.Nodes.Add(Mago);
                        }
                        else
                        {
                            SE = (string)row["Name"];
                            TreeNode Mago = new TreeNode(SE);
                            pnd.Nodes.Add(Mago);
                        }

                    }
                }
            }
            情報.Expand();
        }

引用返信 編集キー/
■62448 / inTopicNo.2)  Re[1]: C#でツリービューを使用するには2
□投稿者/ shu (1038回)-(2011/10/12(Wed) 12:11:21)
No62446 (ネネイ さん) に返信

> pnd.Nodes.Add(Mago);
ここにもdic.Addを追加すると良いと思います。


Level_順でのソートは大丈夫ですよね?
引用返信 編集キー/
■62449 / inTopicNo.3)  Re[2]: C#でツリービューを使用するには2
□投稿者/ ネネイ (5回)-(2011/10/12(Wed) 12:27:30)
shuさん回答ありがとうございます。

> Level_順でのソートは大丈夫ですよね?
はい大丈夫です。
Level_(階層レベル)とVno(表示順)でAcceessのテーブルをソートしております。


>> pnd.Nodes.Add(Mago);
>ここにもdic.Addを追加すると良いと思います。
さっそく、やってみます。


引用返信 編集キー/
■62450 / inTopicNo.4)  Re[3]: C#でツリービューを使用するには2
□投稿者/ ネネイ (7回)-(2011/10/12(Wed) 12:46:55)
孫ノードの部分を下記のようにしたら、登録出来ました。
ほんと、ありがとうございました。昨日、1日悩んでいました。
<m(__)m>また、宜しくお願いします。


                        ///孫ノード
                        if (Children == 0)
                        {
                            SE = (string)row["Name"];
                            TreeNode Mago = new TreeNode(SE);
                    
                            Id = (int)row["ID"];
                            dic.Add((Id), Mago);

                            pnd = dic[ParentId];
                            pnd.Nodes.Add(Mago);
                        }
                        else
                        {
                            SE = (string)row["Name"];
                            TreeNode Mago = new TreeNode(SE);
                            pnd = dic[ParentId];
                            
                            pnd.Nodes.Add(Mago);
                        }

引用返信 編集キー/
■62452 / inTopicNo.5)  Re[4]: C#でツリービューを使用するには2
□投稿者/ ネネイ (9回)-(2011/10/12(Wed) 13:02:33)
解決済みです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -