您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

XtraTreeList使用扎记(2)

2024/4/19 11:32:52发布4次查看
http://www.cnblogs.com/xxm/archive/2006/10/18/532009.html 写完一部分代码。都快要四点了。最近做项目,好久没有往博客上放东西了。趁着还有些精神,赶紧把上次没有发布的代码补上。使用treelist都有两个月了。发现自己使用它的tag属性达到了变态的地步,
http://www.cnblogs.com/xxm/archive/2006/10/18/532009.html
写完一部分代码。都快要四点了。最近做项目,好久没有往博客上放东西了。趁着还有些精神,赶紧把上次没有发布的代码补上。使用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    /**////
 11    /// 一些实现或辅助绑定treelist的静态方法。
 12    ///
 13    public class bindtreelist
 14    {
 15        /**////
 16        /// 初级绑定方法,给定的表中有父子关系的字字段,默认情况下表内所有字段都被绑定到控件内
 17        ///
 18        /// 数据源表
 19        /// 需要绑定的控件
 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        /**////
 34        /// 初级绑定方法:在前一方法的基础上增加了将某一字段加入到tag属性中去。保存附加信息
 35        /// 该表在赋值前以父节点为基础进行了排序
 36        ///
 37        /// 数据源表
 38        /// 附加到tag属性中的字段
 39        /// 需要绑定的控件
 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 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        /**////
 99        /// 针对有时候并不是加载一张表内的所有内容,对此加以变形,对于存在于表中不在列表内的字段
100        /// 给删除,对于不在表内而在列表内的值赋空值加入列表内
101        ///
102        /// 数据源表
103        /// 需要在treelist中显示的字段列表
104        /// 需要绑定的控件
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.id141                        //可能存在只取一部分数据的情况,在这种情况下,取控件内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        /**////
164        ///
165        ///
166        ///
167        ///
168        ///
169        ///
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中的父子节点的列名。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录