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
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.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中的父子节点的列名。

Mysqldiffersfromothersqldialectsyntaxforlimit, auto-increment, stringcomparison, subqueries, andperformanceanalysis.1) mySqlusSlimit, whilesqlserverestopandoracleusesusesrownum.2)

Pemisahan MySQL meningkatkan prestasi dan memudahkan penyelenggaraan. 1) Bahagikan jadual besar ke dalam kepingan kecil dengan kriteria tertentu (seperti julat tarikh), 2) secara fizikal membahagikan data ke dalam fail bebas, 3) MystQL boleh memberi tumpuan kepada partisi yang berkaitan apabila pertanyaan, 4) Pengoptimal pertanyaan boleh melangkau partisi yang tidak berkaitan, 5) Memilih strategi partisi yang tepat dan mengekalkannya secara tetap adalah kunci.

Bagaimana untuk memberikan dan membatalkan keizinan di MySQL? 1. Gunakan pernyataan geran untuk memberikan kebenaran, seperti GrantallPrivileGeSondatabase_name.to'username'@'host '; 2. Gunakan pernyataan membatalkan untuk membatalkan kebenaran, seperti RevokeAllPrivileGeSondatabase_name.from'username'@'host 'untuk memastikan komunikasi tepat pada masanya perubahan kebenaran.

InnoDB sesuai untuk aplikasi yang memerlukan sokongan transaksi dan kesesuaian yang tinggi, sementara myisam sesuai untuk aplikasi yang memerlukan lebih banyak bacaan dan kurang menulis. 1.InnoDB menyokong kunci transaksi dan peringkat bank, sesuai untuk sistem e-dagang dan perbankan. 2.Myisam menyediakan bacaan dan pengindeksan yang cepat, sesuai untuk sistem pengurusan blog dan kandungan.

Terdapat empat jenis utama dalam MySQL: innerjoin, leftjoin, rightjoin dan fullouterjoin. 1.InnerJoin Mengembalikan semua baris dalam dua jadual yang memenuhi syarat gabungan. 2.LeftJoin Mengembalikan semua baris di meja kiri, walaupun tidak ada baris yang sepadan di meja yang betul. 3. Rightjoin bertentangan dengan leftjoin dan mengembalikan semua baris di meja kanan. 4.FullouterJoin Mengembalikan semua baris dalam dua jadual yang memenuhi atau tidak memenuhi syarat gabungan.

MysqloffersvariousstorageEngines, eachSuitedfordifferentusecases: 1) innodbisidealforapplicationsNeedingacidcomplianceandhighconcurrency, supportingtransactionsandforeignkeys.2) myisamisbestforread-heavyworkloads, lacktransactive.2)

Kelemahan keselamatan biasa dalam MySQL termasuk suntikan SQL, kata laluan yang lemah, konfigurasi kebenaran yang tidak betul, dan perisian yang tidak dimulakan. 1. Suntikan SQL boleh dicegah dengan menggunakan pernyataan pra -proses. 2. Kata laluan yang lemah boleh dielakkan dengan secara paksa menggunakan strategi kata laluan yang kuat. 3. 4. Perisian yang tidak ditetapkan boleh ditampal dengan kerap memeriksa dan mengemas kini versi MySQL.

Mengenal pasti pertanyaan perlahan dalam MySQL boleh dicapai dengan membolehkan log pertanyaan perlahan dan menetapkan ambang. 1. Dayakan log pertanyaan perlahan dan tetapkan ambang. 2. Lihat dan menganalisis fail log pertanyaan perlahan, dan gunakan alat seperti mysqldumpslow atau pt-que-digest untuk analisis mendalam. 3. Mengoptimumkan pertanyaan perlahan dapat dicapai melalui pengoptimuman indeks, penulisan pertanyaan dan mengelakkan penggunaan pilih*.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Dreamweaver Mac版
Alat pembangunan web visual
