业务场景:
希望在节点数据中实现:当父节点的某个数据项变化时,相应的子节点的数据项也发生变化。典型的应用就是级联选中(父节点选中后,子节点也相应选中)。

在研究XtraTreeList控件中,要实现这个功能,我试过三种方式:
1、响应XtraTreeList节点中的内置编辑器的Checked事件,失败!
    原因是当Checked响应时,并没有反映到控件的数据源,因而判断是失效的,往往会发生明明是选中的,但在事件响应中判定的是没选中。
2、数据源判定,一般情况下,XtraTreeList的数据源都是DataTable,成功!缺陷就是选中后不能在界面中实时反映出来,在保存的时候才反映出来。
3、响应XtraTreeList的NodeChanged事件,成功!缺陷:只有焦点离开该节点的时候,才会触发该事件,并且,必须在ValidateNode的时候,记录须处理的业务数据,(我是记录在TreeListNode的Tag属性中)。

        private void treeListPower_NodeChanged(object sender, DevExpress.XtraTreeList.NodeChangedEventArgs e)
        
{
            
if (m_currentEditStatus != EditStatus.EditBatch || e.ChangeType != NodeChangeTypeEnum.Tag)
            
{
                
return;
            }

            
if (e.Node.HasChildren)
            
{

                
foreach (TreeListNode n in e.Node.Nodes)
                
{
                    n.SetValue(
1, e.Node.Tag);
                }


            }


        }


        
private void treeListPower_ValidateNode(object sender, DevExpress.XtraTreeList.ValidateNodeEventArgs e)
        
{
            
if (e.Node.HasChildren)
            
{
                e.Node.Tag 
= e.Node.GetValue(1);
            }

            e.Valid 
= true;
        }



注:几个校验事件的触发顺序
validating--数据源发生变化时触发
validated--数据源发生变化时触发

validatingEditor--编辑节点数据时触发
validateNode--编辑节点数据时触发

posted on 2008-04-24 15:31  老程序员  阅读(2249)  评论(0编辑  收藏  举报