日期:2014-05-17 浏览次数:20951 次
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinTest
{
public partial class Form1 : Form
{
DataTable dt;
public Form1()
{
InitializeComponent();
dt = getdata();
}
public DataTable getdata()
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("parentID");
dt.Columns.Add("title");
Random rand = new Random();
for (int i = 0; i < 15; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i + 1;
dr[1] = (15 % (i + 1) == 0) ? "" : rand.Next(1, 10).ToString();
dr[2] = "name_" + (i + 1).ToString();
dt.Rows.Add(dr);
}
return dt;
}
private void button2_Click(object sender, EventArgs e)
{
DataRow[] drows = dt.Select("parentID=''");
if (drows.Length > 0)
{
foreach (DataRow item in drows)
{
ToolStripMenuItem toolitem = new ToolStripMenuItem(item["title"].ToString());
DataRow[] children = dt.Select(string.Format("parentID='{0}'", item["id"].ToString()));
if (children.Length > 0)
{
bind(toolitem, item);
}
menuStrip2.Items.Add(toolitem);
}
}
}
private void bind(ToolStripMenuItem item,DataRow dr)
{
DataRow[] rows = dt.Select(string.Format("parentID='{0}'",dr["id"].ToString()));
if (rows.Length > 0)
{
foreach (DataRow drv in rows)
{
bind(item,drv);
}
}
else
{
item.DropDownItems.Add(dr["title"].ToString());
}
}
}
}
------解决方案--------------------
上面的代码在构造DataTable的时候有问题,不好意思。请看下面的代码。这个是调试通过的。
private void button2_Click(object sender, EventArgs e)
{
InitTree();
}
public void InitTree()
{
DataView dv = this.GetData();
dv.RowFilter = "ParentID=0";
foreach (DataRowView drv in dv)
{
ToolStripMenuItem node = new ToolStripMenuItem();
node.Text = drv["cname"].ToString();
this.menuStrip1.Items.Add(node);
BuildTree(dv, node,drv["cid"].ToString());
}
}
private void BuildTree(DataView dv, ToolStripMenuItem pnode,string parentID)
{
dv.R