|
分類:[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();
}
|