zoukankan      html  css  js  c++  java
  • XtraTreeList使用扎记(2)

    写完一部分代码。都快要四点了。最近做项目,好久没有往博客上放东西了。趁着还有些精神,赶紧把上次没有发布的代码补上。使用TreeList都有两个月了。发现自己使用它的Tag属性达到了变态的地步,在Tag属性里放的Struct里面的东西越来越多。在某种程度上。没有这个属性。我的好多工作是无法完成的。考虑到装箱和拆箱的过程,却也无可奈何。这是一个通过DataTable来自动绑定TreeList的类,考虑到了部分数据显示和部分字段显示,在每个SimpleBind的重载中都加入了这一部分的处理,强调一点。我所处理的数据都是以父子节点为基础的绑定。同时。子节点是以1开始。父节点是以0开始。这样在存入父子节点ID的时候要注意。代码如下,谨供自己和自己一样的菜鸟参考。
      1using System.Collections ;
      2using System.Data ;
      3using BusinessEntity;
      4using PersistenceLayer;
      5using DevExpress.XtraTreeList ;
      6using DevExpress.XtraTreeList.Nodes ;
      7using DevExpress.XtraTreeList.Columns ;
      8namespace NskProject
      9{
     10    /// <summary>
     11    /// 一些实现或辅助绑定TreeList的静态方法。
     12    /// </summary>

     13    public class BindTreeList
     14    {
     15        /// <summary>
     16        /// 初级绑定方法,给定的表中有父子关系的字字段,默认情况下表内所有字段都被绑定到控件内
     17        /// </summary>
     18        /// <param name="Dt">数据源表</param>
     19        /// <param name="Ti">需要绑定的控件</param>

     20        public static void SimpleMode(DataTable Dt,TreeList Ti)
     21        {
     22            if(ParentFieldName==null && ChildFieldName==null)
     23            {
     24                return;
     25            }

     26            
     27           Ti.ParentFieldName=ParentFieldName;
     28            Ti.KeyFieldName=ChildFieldName;
     29            Ti.DataSource=Dt;
     30            Ti.PopulateColumns();
     31            return;
     32        }

     33        /// <summary>
     34        /// 初级绑定方法:在前一方法的基础上增加了将某一字段加入到Tag属性中去。保存附加信息
     35        ///         该表在赋值前以父节点为基础进行了排序
     36        /// </summary>
     37        /// <param name="Dt">数据源表</param>
     38        /// <param name="TagColum">附加到Tag属性中的字段</param>
     39        /// <param name="Ti">需要绑定的控件</param>

     40        public static void SimpleMode(DataTable Dt,DataColumn TagColumn,TreeList Ti)
     41        {
     42            if(ParentFieldName==null && ChildFieldName==null)
     43            {
     44                return;
     45            }

     46            int TagColumnIndex=Dt.Columns.IndexOf(TagColumn);
     47            foreach(DataRow dr in Dt.Rows)
     48            {
     49                object[] Data=new object[Dt.Columns.Count-3];
     50                object Tag=new object() ;
     51                Object[]Source=dr.ItemArray;
     52                int count=0;
     53                //显示数据与附加数据分离
     54                for(int i=0;i<Source.Length;i++)
     55                {
     56                    if(i!=TagColumnIndex  &&i!=-1)
     57                    {
     58                        Data[count]=Source[count];
     59                        count++;
     60                    }

     61                    else
     62                    {
     63                        Tag=Source[i];
     64                    }

     65                }

     66                int ParentID=Convert.ToInt32(dr[ParentFieldName]);
     67                int ChildID=Convert.ToInt32(dr[ChildFieldName]);
     68                int Balance=0;
     69                if(ParentID==0)
     70                {
     71                    TreeListNode Node=Ti.AppendNode(Data,null);
     72                    Node.Tag=Tag;
     73                    if(Node.Id!=ChildID)
     74                    {
     75                        Balance=ChildID;
     76                        //可能存在只取一部分数据的情况,在这种情况下,取控件内ID与表内ID之间的差额
     77                    }

     78                }

     79                else
     80                {
     81                    TreeListNode ParentNode;
     82                    if(Balance>0)//两种不同情况的取得父节点的方法
     83                    {
     84                        ParentNode=Ti.FindNodeByID(ParentID-Balance);
     85                    }

     86                    else
     87                    {
     88                        ParentNode=Ti.FindNodeByID(ParentID-1);
     89                    }

     90                    if(ParentNode!=null)
     91                    {
     92                        TreeListNode Node=Ti.AppendNode(Data,ParentNode);
     93                        Node.Tag=Tag;
     94                    }

     95                }

     96            }

     97        }

     98        /// <summary>
     99        /// 针对有时候并不是加载一张表内的所有内容,对此加以变形,对于存在于表中不在列表内的字段
    100        /// 给删除,对于不在表内而在列表内的值赋空值加入列表内
    101        /// </summary>
    102        /// <param name="Dt">数据源表</param>
    103        /// <param name="FieldList">需要在TreeList中显示的字段列表</param>
    104        /// <param name="Ti">需要绑定的控件</param>

    105        public static void SimpleMode(DataTable Dt,string Fields,TreeList Ti)
    106        {
    107            Ti.Nodes.Clear();
    108            int Balance=0;
    109            string[] FieldList=Fields.Split(",".ToCharArray());
    110            if(ParentFieldName==null && ChildFieldName==null)
    111            {
    112                return;
    113            }

    114            foreach(DataRow dr in Dt.Rows)
    115            {
    116                int index=0;
    117                Object[] Data=new object[FieldList.Length];
    118                foreach(string o in FieldList)
    119                {
    120                    if(Dt.Columns.IndexOf(o)>-1)
    121                    {
    122                        string n=dr[o].ToString().Trim();
    123                        Data[index]=n;
    124                    }

    125                    else
    126                    {
    127                        Data[index]="";
    128                    }

    129                    index++;
    130                }

    131              
    132                int ParentID=Convert.ToInt32(dr[ParentFieldName]);
    133                int ChildID=Convert.ToInt32(dr[ChildFieldName]);
    134                
    135                if(ParentID==0)
    136                {
    137                    TreeListNode Node=Ti.AppendNode(Data,null);
    138                    if(Node.Id!=ChildID-1)
    139                    {
    140                        Balance=Node.Id<ChildID?ChildID-Node.Id:Node.Id-ChildID;
    141                        //可能存在只取一部分数据的情况,在这种情况下,取控件内ID与表内ID之间的差额
    142                    }

    143                }

    144                else
    145                {
    146                    TreeListNode ParentNode;
    147                    if(Balance>0)//两种不同情况的取得父节点的方法
    148                    {
    149                        ParentNode=Ti.FindNodeByID(ParentID-Balance);
    150                    }

    151                    else
    152                    {
    153                        ParentNode=Ti.FindNodeByID(ParentID-1);
    154                    }

    155                    if(ParentNode!=null)
    156                    {
    157                        TreeListNode Node=Ti.AppendNode(Data,ParentNode);
    158                        
    159                    }

    160                }

    161            }

    162        }

    163        /// <summary>
    164        /// 
    165        /// </summary>
    166        /// <param name="Dt"></param>
    167        /// <param name="Fields"></param>
    168        /// <param name="Ti"></param>
    169        /// <param name="TagColumn"></param>

    170        public static void SimpleMode(DataTable Dt,string Fields,TreeList Ti,string TagColumn)
    171        {
    172            Ti.Nodes.Clear();
    173            int Balance=0;
    174            string[] FieldList=Fields.Split(",".ToCharArray());
    175            if(ParentFieldName==null && ChildFieldName==null)
    176            {
    177                return;
    178            }

    179            foreach(DataRow dr in Dt.Rows)
    180            {
    181                int index=0;
    182                Object[] Data=new object[FieldList.Length];
    183                foreach(string o in FieldList)
    184                {
    185                    if(o!=TagColumn && Dt.Columns.IndexOf(o)>-1)
    186                    {
    187                        string n=dr[o].ToString().Trim();
    188                        Data[index]=n;
    189                    }

    190                    else
    191                    {
    192                        Data[index]="";
    193                    }

    194                    index++;
    195                }

    196              
    197                int ParentID=Convert.ToInt32(dr[ParentFieldName]);
    198                int ChildID=Convert.ToInt32(dr[ChildFieldName]);
    199                
    200                if(ParentID==0)
    201                {
    202                    TreeListNode Node=Ti.AppendNode(Data,null);
    203                    Node.Tag =dr[TagColumn];
    204                    if(Node.Id!=ChildID)
    205                    {
    206                        Balance=ChildID;
    207                        //可能存在只取一部分数据的情况,在这种情况下,取控件内ID与表内ID之间的差额
    208                    }

    209                }

    210                else
    211                {
    212                    TreeListNode ParentNode;
    213                    if(Balance>0)//两种不同情况的取得父节点的方法
    214                    {
    215                        ParentNode=Ti.FindNodeByID(ParentID-Balance);
    216                    }

    217                    else
    218                    {
    219                        ParentNode=Ti.FindNodeByID(ParentID-1);
    220                    }

    221                    if(ParentNode!=null)
    222                    {
    223                        TreeListNode Node=Ti.AppendNode(Data,ParentNode);
    224                        Node.Tag =dr[TagColumn];
    225                        
    226                    }

    227                }

    228            }

    229        }

    230        private static string _ParentFieldName="";
    231        private static string _ChildFieldName="";
    232        public  static  string ParentFieldName
    233        {
    234            get{return _ParentFieldName;}
    235            set{_ParentFieldName=value;}
    236        }

    237
    238        public static string ChildFieldName
    239        {
    240            get{return _ChildFieldName;}
    241            set{_ChildFieldName=value;}
    242        }

    243        
    244    }

    245}

    246
    这是一个静态方法,在执行SimpleBind方法前。必须对ChildFieldName和ParentFieldName进行赋值,它们对应着Dt中的父子节点的列名。
  • 相关阅读:
    JavaScript节点属性
    main函数的参数
    CGI
    open()函数 linux中open函数使用
    海伦公式
    C语言字符串操作函数
    makefile(一)
    makefile
    第一天
    时间小憩
  • 原文地址:https://www.cnblogs.com/xxm/p/532009.html
Copyright © 2011-2022 走看看