treelist设置展开卡顿

treelist设置展开卡顿,第1张

treelist设置展开卡顿:Devexpress中的TreeList是经常用到的数据浏览管理控件,它的数据加载方式通常是赋予DataSource数据源,并指定ParentFieldName和KeyFieldName来确定"父子"关系,这种绑定方式 *** 作简单,但加载和 *** 作十分卡顿(100个节点),用户体验非常差。

推荐使用AppendNode逐条加载,此方法有多个重载方法,支持设置节点数据对象(object数据组或DataRow)、父节点ID、父节点、图像索引、选择状态、tag值等。

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;

树形控件是使用频率很高的一种控件。对于属性控件往往需要下面两个功能

1TreeList带有CheckBox,并且节点要有三种状态(所有的子节点都选中,所有的子节点都没选择,一部分子节点选中)。使用DevXpress的TreeList控件很容易实现这一功能。

设置TreeListOptionsViewShowCheckBoxes = true //是否显示CheckBox

设置TreeListOptionsBehaviorAllowIndeterminateCheckState = true; //设置节点是否有中间状态,即一部分子节点选中,一部分子节点没有选中

设置这两个属性之后就实现了TreeList带有CheckBox,并且节点有三种状态。

2选中父节点或者子节点相互影响的功能,如选择父节点选择所有子节点。绑定TreeList的两个事件AfterCheckNode和BeforeCheckNode

实现功能的代码如下:

private void treeList1_AfterCheckNode(object sender, DevExpressXtraTreeListNodeEventArgs e)

{

SetCheckedChildNodes(eNode, eNodeCheckState);

SetCheckedParentNodes(eNode, eNodeCheckState);

}

private void treeList1_BeforeCheckNode(object sender, DevExpressXtraTreeListCheckNodeEventArgs e)

{

eState = (ePrevState == CheckStateChecked CheckStateUnchecked : CheckStateChecked);

}

/// <summary>

/// 设置子节点的状态

/// </summary>

/// <param name="node"></param>

/// <param name="check"></param>

private void SetCheckedChildNodes(TreeListNode node, CheckState check)

{

for (int i = 0; i < nodeNodesCount; i++)

{

nodeNodes[i]CheckState = check;

SetCheckedChildNodes(nodeNodes[i], check);

}

}

/// <summary>

/// 设置父节点的状态

/// </summary>

/// <param name="node"></param>

/// <param name="check"></param>

private void SetCheckedParentNodes(TreeListNode node, CheckState check)

{

if (nodeParentNode != null)

{

bool b = false;

CheckState state;

for (int i = 0; i < nodeParentNodeNodesCount; i++)

{

state = (CheckState)nodeParentNodeNodes[i]CheckState;

if (!checkEquals(state))

{

b = !b;

break;

}

}

nodeParentNodeCheckState = b CheckStateIndeterminate : check;

SetCheckedParentNodes(nodeParentNode, check);

}

}

1TreeListNodeCellStyle事件

Node的显示(包括窗口的切换导致Node的显示)和状态的改变都会触发该事件。该事件主要用来改变Node的显示样式。

private void treeList1_NodeCellStyle(object sender, DevExpressXtraTreeListGetCustomNodeCellStyleEventArgs e)

{

if (eNodeCheckState == CheckStateUnchecked)

{

eAppearanceFont = new Font(DevExpressUtilsAppearanceObjectDefaultFont, FontStyleStrikeout);

eAppearanceForeColor = ColorGray;

}

}

上面的代码是实现的效果是 : CheckState为Unchecked的节点的字带有中划线且背景灰色。

2TreeListDoubleClick事件

双击Node时触发,但要注意的是要在TreeListOptionsBehaviorEditable = false的情况下,双击Node才能触发该事件。

private void treeList1_DoubleClick(object sender, EventArgs e)

{

TreeListNode clickedNode = thistreeList1FocusedNode;

string disPlayText = clickedNodeGetDisplayText("test");

MessageBoxShow("You clicked " + disPlayText);

}

3TreeList的命中测试特性

private void treeList1_MouseMove(object sender, MouseEventArgs e)

{

Point point = treeList1PointToClient(CursorPosition);

TreeListHitInfo hitInfo = treeList1CalcHitInfo(point);

switch (hitInfoHitInfoType)

{

case HitInfoTypeCell:

thisCursor = CursorsHand;

break;

case HitInfoTypeNodeCheckBox:

thisCursor = CursorsPanEast;

break;

default :

thisCursor = CursorsDefault;

break;

}

}

treeListAppendNode(参数1,参数2)//添加节点的方法

例如:

TreeListNode ParentNode=treeListAppendNode(null,null);//添加第一节点

ParentNodeSetValue(treeListColumns[0], "显示的值");//添加第一节点显示的值

private string FullNameByNode(TreeListNode node, int columnId)

{

/+++++++/ if(nodeGetValue(columnId)==null) {return stringEmpty;}

string ret = ConvertToString(nodeGetValue(columnId));

if (nodeParentNode != null)

{

node = nodeParentNode;

ret = nodeGetValue(columnId)ToString() + "\\" + ret; //得到所选中行节点的第一个值“\\”是隔开父节点和子节点

}

return ret;

}

treeList_FocusedNodeChanged这个时间,貌似在创建控件的时候都会触发一次,即使没有绑定数据源,取值前判断一下

你这样做的话,可以加个判断就行了 答案补充 这样可以!传个值到地址拦上去,再去取就可以达到你的效果! 答案补充 选中时,取个值把这个值传到地址上面去,GET传值再去取

这样随你怎么刷新,都不会变依然是你选中的那个节点

带不带复选框你都要用递归才能取到全部子节点。

private void GetChildNodes(TreeListNode parentNode, List<TreeListNode> list)

{

if(parentNodeNodesCount > 0)

{

foreach(TreeListNode node in ParentNodeNodes)

{

listAdd(node);

if(nodeNodesCount > 0)

{

GetChildNodes(node, list);

}

}

}

}

以上就是关于treelist设置展开卡顿全部的内容,包括:treelist设置展开卡顿、devexpress treelist 绑定数据时让部分节点默认选择、devexpress控件中的treelist怎么弄多表头等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9779445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存