treeListAppendNode(参数1,参数2)//添加节点的方法 例如: TreeListNode ParentNode=treeListAppendNode(null,null);//添加第一节点 ParentNodeSetValue(treeListColumns[0], "显示的值");//添加第一节点显示的值
你要的功能不是多行显示而是多列显示吧,cxDBTreeList主要有以下三个关键属性
KeyFields: 子节点ID
DisplayFields:节点内容这里就是显示内容,记得可以在界面上直接新增的,应该是双击cxDBTreeList吧
ParentFields:父节点ID
首先启用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;
}
}
}
treelist设置展开卡顿:Devexpress中的TreeList是经常用到的数据浏览管理控件,它的数据加载方式通常是赋予DataSource数据源,并指定ParentFieldName和KeyFieldName来确定"父子"关系,这种绑定方式 *** 作简单,但加载和 *** 作十分卡顿(100个节点),用户体验非常差。
推荐使用AppendNode逐条加载,此方法有多个重载方法,支持设置节点数据对象(object数据组或DataRow)、父节点ID、父节点、图像索引、选择状态、tag值等。
树形控件是使用频率很高的一种控件。对于属性控件往往需要下面两个功能
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;
}
}
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;
这个设置行高步骤如下:
首先先初始化Arrayadapter,类型是string。
然后然后装入listview,如果发现每个item尺寸太大,在一个屏幕中放不开。
3、在设置布局的高度,还有如果布局是全屏。只要设置布局中的组件layout_height 即可。
以上就是关于怎样给DevExpress XtraTreeList添加行的序号全部的内容,包括:怎样给DevExpress XtraTreeList添加行的序号、怎么使得cxDBTreeList的节点内容可以多行显示、Dev TreeList 如何点击空白取消选中的列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)