Winform TreeView 节点加载例子
2019-08-12 本文已影响0人
a9b854aded01
场景:以一个仓库为栗子,仓库里面会有货位,货位可以有一级货位、二级货位......无数货位,货位是不会出现跳级的情况(必须有连续的上级货位)。
首先加载一级货位
//货位
DataTable dt_depositplace = MyBaseManageProxy.GetDepositPlaceData(rar_name).Tables[0];
dt_place.TableName = "depositplace";
depositplace = dt_depositplace;
DataView dvstore = dt_storeof.DefaultView;
dvstore.Sort = "Dep_Name";
DataTable dtstore = dvstore.ToTable();
DataView dvallplace = dt_depositplace.DefaultView;
dvallplace.Sort = "Gal_ID";
DataTable dtallplace = dvallplace.ToTable();
#region 一级
DataView dv1 = dtallplace.DefaultView;
dv1.RowFilter = "Gal_Superior = 0 ";
if (dv1.Count > 0)
{
DataTable dt = dv1.ToTable();
foreach (DataRow dr in dt.Rows)
{
TreeNode tn = new TreeNode();
tn.Name = dr["Gal_ID"].ToString().Trim();
tn.Text = dr["Gal_NAME"].ToString().Trim();
tn.Tag = 0;
treeView1.Nodes.Add(tn);
}
//treeView1.Nodes.Add(tn);
}
#endregion
this.treeView1.ExpandAll();
BindData(dt_depositplace);
BindData(dt_depositplace) 没有点击的二级货位都显示loading
public void BindData(DataTable dt)
{
for (int y = 0; y < this.treeView1.Nodes.Count; y++)
{
//判断是否有子节点;
DataView dv1 = dt.Copy().DefaultView;
dv1.RowFilter = string.Format(" Gal_Superior = '{0}'", Convert.ToInt32(this.treeView1.Nodes[y].Name.ToString().Trim()));
int count = dv1.ToTable().Rows.Count;
if (count > 0)
{
TreeNode tree_load = new TreeNode();
tree_load.Text = "loading...";
this.treeView1.Nodes[y].Nodes.Add(tree_load);
this.treeView1.Nodes[y].Collapse();
}
}
}
事件绑定 this.View.TreeView.BeforeExpand += new TreeViewCancelEventHandler(treeView1_BeforeExpand); 当点击某一节点时加载下级货位
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes.Count > 1)
{
if (e.Node.Nodes[0].Text == "loading...")
{
e.Node.Nodes.RemoveAt(0);
}
return;
}
if (e.Node.Nodes[0].Text != "loading...")
{
return;
}
if (!string.IsNullOrEmpty(e.Node.Tag.ToString()))
{
if (Convert.ToInt32(e.Node.Tag) >= 0)
{
namelist.Clear();
if (e.Node.Nodes[0].Text == "loading...")
{
e.Node.Nodes.RemoveAt(0);
}
//e.Node.Nodes.Clear();
DataTable dt = GetDateByID(Convert.ToInt32(e.Node.Name));
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode t = new TreeNode();
t.SelectedImageIndex = 1;
t.Name = dt.Rows[i][0].ToString().Trim();
t.Text = dt.Rows[i][1].ToString().Trim();
t.Tag = Convert.ToInt32(e.Node.Tag) + 1;
namelist.Add(dt.Rows[i][1].ToString().Trim());
e.Node.Nodes.Add(t);
int count = GetCountByID(Convert.ToInt32(t.Name));
if (count > 0)
{
TreeNode tree_load = new TreeNode();
tree_load.Text = "loading...";
t.Nodes.Add(tree_load);
t.Collapse();
}
}
}
}
}
}