您好,很高兴能帮助您,
foreach (TreeNode item in treeView1Nodes)//遍历Treeview的所有节点
{
TreeNode node =GetNode(item);//遍历子节点
treeView2NodesAdd(node);
}
private TreeNode GetNode(TreeNode node)
{
if (nodeNodesCount == 0)
return new TreeNode(nodeText);
TreeNode ns = new TreeNode(nodeText);
foreach (TreeNode item in nodeNodes)
{
TreeNode n = GetNode(item);
nsNodesAdd(n);
}
return ns;
}
你的采纳是我前进的动力,还有不懂的地方,请你继续“追问”!
如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助!
DataTable dtTree = new DataTable();
dtTreeColumnsAdd("ID",typeof(string));
dtTreeColumnsAdd("Code", typeof(string));
dtTreeColumnsAdd("Name", typeof(string));
dtTreeColumnsAdd("Description", typeof(string));
dtTreeColumnsAdd("ParentID", typeof(string));
//新增加的列 布尔类型才能绑定checkbox
dtTreeColumnsAdd("Tag", typeof(bool));
dtTreeColumnsAdd("Happy", typeof(string));
DataRow row = dtTreeNewRow();
row["ID"] = "1";
row["Code"] = "001";
row["Name"] = "野原广志";
row["Description"] = "野原广志";
row["ParentID"] = "-1";
row["tag"] = false;
row["Happy"] = "爱吃青椒";
dtTreeRowsAdd(row);
DataRow row2 = dtTreeNewRow();
row2["ID"] = "2";
row2["Code"] = "002";
row2["Name"] = "野原美呀";
row2["Description"] = "野原美呀";
row2["ParentID"] = "-1";
row2["tag"] = false;
row2["Happy"] = "爱吃青椒";
dtTreeRowsAdd(row2);
DataRow row3 = dtTreeNewRow();
row3["ID"] = "3";
row3["Code"] = "003";
row3["Name"] = "野原新之助";
row3["Description"] = "野原新之助";
row3["ParentID"] = "-1";
row3["tag"] = false;
row3["Happy"] = "不爱吃青椒";
dtTreeRowsAdd(row3);
DataRow row4 = dtTreeNewRow();
row4["ID"] = "4";
row4["Code"] = "004";
row4["Name"] = "野原小白";
row4["Description"] = "野原小白";
row4["ParentID"] = "3";
row4["tag"] = false;
row4["Happy"] = "不爱吃青椒";
dtTreeRowsAdd(row4);
//模拟数据 将查询出来的datatable添加一列 例如:tag
//然后查询datatable type列 当type为“板式”,“沙发”时 将tag列置为true
DataRow[] drs = dtTreeSelect("Happy='爱吃青椒'");
foreach (DataRow item in drs)
{
item["tag"] = true;
}
treeList1DataSource = dtTree;
你这样做的话,可以加个判断就行了 答案补充 这样可以!传个值到地址拦上去,再去取就可以达到你的效果! 答案补充 选中时,取个值把这个值传到地址上面去,GET传值再去取
这样随你怎么刷新,都不会变依然是你选中的那个节点
Linq表达式中Select以及SelectMany的用法,select是将一个源list投影到一个属性值或者多个属性值,也可以是另外一个属性类,通常和where子句连用,通过where子句对list进行筛选之后投影成我们需要的属性。有时我们只需要list中的单个属性,例如是需要查询井的信息,那么我们只需要知道井ID的list集合。那么我们就可以使用select语句投影成到这个井ID属性。
select单属性投影
石油软件类的项目通常左边为项目树,通过左边treeList的节点点击,向后台发送TreeNode属性集合,石油类部门的组织机构通常分为井区、井组、单井,当我们点击了井组集合,井区之下包含了很多口单井,井组之下包含该井组的单井,通常为5~10口单井。假设用户点击了井组节点之后,我们要获得他下面的单井节点。我们首先需要判断用户点击的是哪一级的节点,做法一般是给点击的节点赋值一个Level,通过spilt()方法判断点击是井区、井组还是单井级别。当然我们这里限定了用户点击的是井组节点,那么我们就要获取它下面所属的单井节点。需要注意的是,项目树节点传过来的类型为List<object>。WellOrganDescriptor类封装了组织机构单井信息类,利用ofType方法限定了方法属性名,通过select方法投影出单井的ID属性,使用var匿名定义方法返回值。看出区别没,对于select投影,定义一个item属性,然后进行new出这个list的属性集合,然后投影出自己需要的属性集合。但是细心的你可能会发现,后面还加了一层where筛选,这个是在石油生产环节井分为采油井、注水井,由于需求需要选出采油井的id,所以加了这层属性的筛选,最终拿出这些油井的id。
2、new出新的对象类,将投影出来的属性进行赋值获取
首先启用TreeList的ShowingEditor事件,该事件在控件转化到可编辑状态前调用,只要设置该事件的参数CancelEventArgs即可
而对于具体是哪一个节点则可以通过TreeList的FocusedNode来获取,而对于是哪一列则可以通过TreeList的FocusedColumn来获取
而我现在的这个项目还要求结合第一列的值来进行判断,那么就通过FocusedNode的GetValue(0)方法来获取第一列的值。
写了这么多还是来看一下代码可能更明白:
private void treeList1_ShowingEditor(object sender, CancelEventArgs e)
{
TreeList currentTreeList = sender as TreeList;
if (currentTreeList != null)
{
TreeListNode node = currentTreeListFocusedNode;
DevExpressXtraTreeListColumnsTreeListColumn column = currentTreeListFocusedColumn;
if (columnFieldName == "ITEM_VALUE" && nodeGetValue(0)ToString() != "")
{
eCancel = true;
}
else
{
eCancel = false;
}
}
}
以上就是关于如何遍历鎑ev控件中treelist的树节点全部的内容,包括:如何遍历鎑ev控件中treelist的树节点、devexpress treelist 绑定数据时让部分节点默认选择、c#中,treelist这个控件刷新后 如何不改变它之前的选中节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)