先给出我做的效果图,应该符合你的要求:
代码:
private DataSet GetData(string sql)
{ //不知道你用的什么数据库,我由于最近在用Access,
//所以函数是连接的Access,得到 DataSet
//如果用SQL Server或者其他是类似的,传入sql语句,得到DataSet
//DBAccess是自定义类,没有贴上代码,如果要具体的数据库连接代码,说一下
string accessDb = @"E:\dat.mdb";
DBAccess access = new DBAccess(accessDb, sql);
return access.GetDataSet();
}
private void button1_Click(object sender, EventArgs e)
{
if (!treeView1.Nodes.ContainsKey("区域名"))//先判断是否已经存在这个节点
{
TreeNode root = new TreeNode("区域名");//创建节点
root.Name = "区域名";//为节点取个名字,这儿创建的是根节点
treeView1.Nodes.Add(root);//将节点添加到treeView1上
DataSet ds = GetData("select distinct 区域位置 from T_Machines");//获取数据集dataset
foreach (DataRow row in ds.Tables[0].Rows)
{
TreeNode node = new TreeNode(row["区域位置"].ToString());
node.Name = row["区域位置"].ToString();
if (!root.Nodes.ContainsKey(node.Name))
{
root.Nodes.Add(node);
}
}
}
}
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode clickedNode = e.Node;
string name = clickedNode.Text;
DataSet ds = GetData("select 机器编号 from T_Machines where 区域位置='" + name + "'");
foreach (DataRow row in ds.Tables[0].Rows)
{
TreeNode node = new TreeNode(row["机器编号"].ToString());
node.Name = row["机器编号"].ToString();
if (!clickedNode.Nodes.ContainsKey(node.Name))
{
clickedNode.Nodes.Add(node);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
DataColumn dc = new DataColumn("编号");
DataColumn dc2 = new DataColumn("位置");
DataColumn dc3 = new DataColumn("机型");
dt.Columns.Add(dc);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
DataRow dr;
dr = dt.NewRow();
dr["编号"] = 1;
dr["位置"] = "江苏";
dr["机型"] = "201010";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["编号"] = 2;
dr["位置"] = "南京";
dr["机型"] = "201010";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["编号"] = 3;
dr["位置"] = "无锡";
dr["机型"] = "201010";
dt.Rows.Add(dr);
--------------------下面是从DataTable中遍历的出来的
foreach (DataRow item in dt.Rows)
{
string where = item["位置"].ToString();
string time = item["机型"].ToString();
TreeNode t = new TreeNode(where);
TreeNode tt = new TreeNode(time);
t.Nodes.Add(tt); // 这些是只有一层子节点的,可以自己再
treeView1.Nodes.Add(t);
}