| 再帰を使った方法です。ループしていると危険です。データ量が多いと使えません。
TreeNodeのテキストは商品名のみの状態です。
dt = new DataTable("商品テーブル");
dt.Columns.Add("商品コード", typeof(string));
dt.Columns.Add("商品名", typeof(string));
dt.Columns.Add("使用商品", typeof(string));
dt.Rows.Add("111", "AAA", "222");
dt.Rows.Add("111", "AAA", "444");
dt.Rows.Add("111", "AAA", "555");
dt.Rows.Add("222", "BBB", "333");
dt.Rows.Add("333", "CCC", "");
dt.Rows.Add("444", "DDD", "333");
dt.Rows.Add("444", "DDD", "666");
dt.Rows.Add("555", "EEE", "");
dt.Rows.Add("666", "FFF", "");
MakeTree(null, "111");
private void MakeTree(TreeNode nd ,string Code)
{
DataRow[] rows = dt.Select(String.Format("商品コード = '{0}'", Code), "商品コード");
if (rows.Length>0)
{
TreeNode nd2;
string gnm = rows[0].Field<string>("商品名");
if (nd == null)
{
nd2 = treeView1.Nodes.Add(gnm);
} else {
nd2 = nd.Nodes.Add(gnm);
}
foreach(DataRow row in rows)
{
string ucd = row.Field<string>("使用商品");
if (ucd != "")
{
MakeTree(nd2, ucd);
}
}
}
} |