要求:给一个表做查询.很简单.简单到我不知他的什么要求.我那就只好对DataTable做查询了.数据也不知道有什么东东.本来还想对IList<T>做到查询的,有点麻烦,暂时不做了.
先放一个接口.定义了相关查询要的规范,也可以说是契约吗.
Code
1public interface QueryClass
2{
3 /**//// <summary>
4 /// 数据集的栏位
5 /// </summary>
6 List<string> Columns
7 {
8 get;
9 }
10 /**//// <summary>
11 /// 查询条件
12 /// </summary>
13 string Where
14 {
15 get;
16 set;
17 }
18 /**//// <summary>
19 /// 数据集
20 /// </summary>
21 object DataSource
22 {
23 get;
24 set;
25 }
26 /**//// <summary>
27 /// 查询
28 /// </summary>
29 /// <returns></returns>
30 object Select();
31 /**//// <summary>
32 /// And查询
33 /// </summary>
34 /// <param name="column"></param>
35 /// <param name="sing"></param>
36 /// <param name="value"></param>
37 /// <returns></returns>
38 string And(string column, string sing, string value);
39 string Or(string column, string sing, string value);
40 /**//// <summary>
41 /// 自动完成
42 /// </summary>
43 /// <param name="column"></param>
44 /// <returns></returns>
45 List<string> AutoComplete(string column);
46 /**//// <summary>
47 /// 查询条件变化后引起的事件
48 /// </summary>
49 event Event_Select event_Select;
50 /**//// <summary>
51 /// 自动完成选择多少需要的数据
52 /// </summary>
53 int AutoCompleteCount { get;set;}
54 List<string> AutoComplete(string column, string value);
55}
56/**//// <summary>
57/// 事件所需的委托
58/// </summary>
59/// <param name="data"></param>
60/// <returns></returns>
61public delegate object Event_Select(object data);
1public interface QueryClass
2{
3 /**//// <summary>
4 /// 数据集的栏位
5 /// </summary>
6 List<string> Columns
7 {
8 get;
9 }
10 /**//// <summary>
11 /// 查询条件
12 /// </summary>
13 string Where
14 {
15 get;
16 set;
17 }
18 /**//// <summary>
19 /// 数据集
20 /// </summary>
21 object DataSource
22 {
23 get;
24 set;
25 }
26 /**//// <summary>
27 /// 查询
28 /// </summary>
29 /// <returns></returns>
30 object Select();
31 /**//// <summary>
32 /// And查询
33 /// </summary>
34 /// <param name="column"></param>
35 /// <param name="sing"></param>
36 /// <param name="value"></param>
37 /// <returns></returns>
38 string And(string column, string sing, string value);
39 string Or(string column, string sing, string value);
40 /**//// <summary>
41 /// 自动完成
42 /// </summary>
43 /// <param name="column"></param>
44 /// <returns></returns>
45 List<string> AutoComplete(string column);
46 /**//// <summary>
47 /// 查询条件变化后引起的事件
48 /// </summary>
49 event Event_Select event_Select;
50 /**//// <summary>
51 /// 自动完成选择多少需要的数据
52 /// </summary>
53 int AutoCompleteCount { get;set;}
54 List<string> AutoComplete(string column, string value);
55}
56/**//// <summary>
57/// 事件所需的委托
58/// </summary>
59/// <param name="data"></param>
60/// <returns></returns>
61public delegate object Event_Select(object data);
下面是相关DataTable的实现.如下
Code
1public class QueryTable : QueryClass
2{
3 public event Event_Select event_Select;
4 private DataTable table;
5 public object DataSource
6 {
7 get
8 {
9 return table;
10 }
11 set
12 {
13 table = value as DataTable;
14 }
15 }
16 public QueryTable()
17 {
18 }
19 private List<string> columns;
20 public List<string> Columns
21 {
22 get
23 {
24 if (columns == null)
25 {
26 columns = new List<string>();
27 foreach (DataColumn c in table.Columns)
28 {
29 columns.Add(c.ColumnName);
30 }
31 }
32 return columns;
33 }
34 }
35 private string where = string.Empty;
36 public string Where
37 {
38 get
39 {
40 return where;
41 }
42 set
43 {
44 //当改变Where后就会引发函数Select(在里面会引发事件,使包含这个对象的对象也可以做相应的变化)
45 where = value;
46 Select();
47 }
48 }
49 public object Select()
50 {
51 DataTable newtable = new DataTable();
52 newtable = table.Clone();
53 DataRow[] rows = table.Select(where);
54 foreach(DataRow row in rows)
55 {
56 newtable.ImportRow(row);
57 }
58 // DataSource = newtable;
59 event_Select(newtable);
60 return newtable;
61 }
62 public string Select(string column, string sing, string value)
63 {
64 return And(column, sing, value);
65 }
66 public string And(string column, string sing, string value)
67 {
68 if (!string.IsNullOrEmpty(where))
69 {
70 where += " and ";
71 }
72 if (sing == "like")
73 {
74 value = "%" + value + "%";
75 }
76 Where += column + " " + sing + " " + "'" + value + "'" +
1public class QueryTable : QueryClass
2{
3 public event Event_Select event_Select;
4 private DataTable table;
5 public object DataSource
6 {
7 get
8 {
9 return table;
10 }
11 set
12 {
13 table = value as DataTable;
14 }
15 }
16 public QueryTable()
17 {
18 }
19 private List<string> columns;
20 public List<string> Columns
21 {
22 get
23 {
24 if (columns == null)
25 {
26 columns = new List<string>();
27 foreach (DataColumn c in table.Columns)
28 {
29 columns.Add(c.ColumnName);
30 }
31 }
32 return columns;
33 }
34 }
35 private string where = string.Empty;
36 public string Where
37 {
38 get
39 {
40 return where;
41 }
42 set
43 {
44 //当改变Where后就会引发函数Select(在里面会引发事件,使包含这个对象的对象也可以做相应的变化)
45 where = value;
46 Select();
47 }
48 }
49 public object Select()
50 {
51 DataTable newtable = new DataTable();
52 newtable = table.Clone();
53 DataRow[] rows = table.Select(where);
54 foreach(DataRow row in rows)
55 {
56 newtable.ImportRow(row);
57 }
58 // DataSource = newtable;
59 event_Select(newtable);
60 return newtable;
61 }
62 public string Select(string column, string sing, string value)
63 {
64 return And(column, sing, value);
65 }
66 public string And(string column, string sing, string value)
67 {
68 if (!string.IsNullOrEmpty(where))
69 {
70 where += " and ";
71 }
72 if (sing == "like")
73 {
74 value = "%" + value + "%";
75 }
76 Where += column + " " + sing + " " + "'" + value + "'" +