首页 > 代码库 > C#----List<>,DataTable,DataView的使用
C#----List<>,DataTable,DataView的使用
首先申明一下,写此博文的目的是纪录一下,知识都是现成的,只是整理一下,为了让自己更容易看懂,比在其他地方更容易明白。因为它们太常用了,不忍心每次都去用那么长的时间查看MSDN,希望能在这里用理少的时间来理解并运用其用法。最终目标是减少从接触到能理解并使用的时间。
List<T>类型的查找操作Find
1 Point pt; 2 List<Point> lstPs = new List<Point>(); 3 for (int i = 0; i < 10; i++) 4 { 5 pt = new Point(i, i + 100); 6 lstPs.Add(pt); 7 } 8 Point pp = lstPs.Find( delegate(Point p)//pp是结果Point,是查到的目标 9 {10 return p.X == 9;//这个是有目标的情况,如果没有这个X==9的这个点呢?11 });12 Point ppNo = lstPs.Find(delegate(Point p)13 {14 return p.X == 1000;//如果队列中没有目标点,返回的是Point类型的默认值15 });16 Console.WriteLine("目标点是:"+pp);17 Console.WriteLine("没有发现目标点时得到的是默认值:" + ppNo);18 /*19 返回结果如下:20 目标点是:{X=9,Y=109}21 没有发现目标点时得到的是默认值:{X=0,Y=0}22 */
结论:使用Find方法时要注意return 语句后面是bool类型的表达式,不是想当然的返回一个目标T类型,这里是Point类型。在List中有目标就查到目标,如果没有话就返回 T类型的默认值(default(T)可得到)。
DataTable的使用
1、添加列
2、添加行
3、查找数据select方法的使用
DataTable dtAll = new DataTable(); //下面建立列过程:分别添加名为ID的列,名为name的列,名为score的列,类型分别是long,string,float。 DataColumn dc = new DataColumn("ID", typeof(long)); dtAll.Columns.Add(dc); dc = new DataColumn("name", typeof(string)); dtAll.Columns.Add(dc); dc = new DataColumn("score", typeof(float)); dtAll.Columns.Add(dc); //为表添加行 DataRow dr = dtAll.NewRow(); dr[0] = 2009000;//其实是一个装箱过程,把int装箱为object dr[1] = "john"; dr[2] = 98.5; dtAll.Rows.Add(dr); dr = dtAll.NewRow(); dr[0] = 2009001; dr[1] = "Lucy"; dr[2] = 23.5; dtAll.Rows.Add(dr); DataRow[] drs = dtAll.Select("ID=2009000"); Console.WriteLine(drs[0][2]);//查找到的第一个人的分数score,结果是当然的98.5
几个需要注意的地方。第一、先添加列,而不是先添加行,在添加列后再补充每行;第二、向第n行的第m列添加数据时是一个装箱过程,取出目标数据时需要拆箱操作,一般是Convert.To***方法;第三、查寻时的过滤条件是string,语法是SQL相仿。
一个例子:查找条件不同时的结果。
1 DataTable dt = new DataTable(); 2 for (int i = 0; i < 2; i++)//加两列 3 { 4 DataColumn dc = new DataColumn(); 5 if (i == 0) 6 { 7 dc.ColumnName = "we"; 8 dc.DataType = typeof(int); 9 }10 dt.Columns.Add(dc);11 }12 13 DataRow dr = dt.NewRow();14 dr[0] = 99;15 dr[1] = "ddd";16 dt.Rows.Add(dr);17 18 dr = dt.NewRow();19 dr[0] = 80;20 dr[1] = "808080";21 dt.Rows.Add(dr);22 23 string condition = "we>70 and we<" + 90;24 DataRow[] drs = dt.Select(condition);25 string tmp = drs[0][1].ToString();//能输出正常结果,根据条件condition的不同输出不同的结果26 Console.WriteLine(tmp);
condition作为条件,使用SQL语法 .
DataView的一些用法
1、使用DataTable得到DataView时一个问题
原始有问题的代码如下:
1 DataView dvClass = booksClass.dtClass.DefaultView;2 DataView dvChild = booksClass.dtClass.DefaultView;3 dvClass.RowFilter="father=‘11‘";4 dvChild.RowFilter = "father=‘22‘";
这样做后,回头再看发现dvClass 和 dvChild的RowFilter是相同的,都是"father=‘22‘";原来是因为dvClass dvChild引用了同一个实例。所以修改如下:
1 DataView dvChild = new DataView(booksClass.dtClass);// booksClass.dtClass.DefaultView;2 dvClass.RowFilter = "father=‘11‘";3 dvChild.RowFilter = "father=‘222‘";
问题得以解决,两个DataView就变得独立了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。