首页 > 其他 > 详细

C#----List<>,DataTable,DataView的使用

时间:2014-06-22 10:47:49      阅读:552      评论:0      收藏:0      [点我收藏+]

  首先申明一下,写此博文的目的是纪录一下,知识都是现成的,只是整理一下,为了让自己更容易看懂,比在其他地方更容易明白。因为它们太常用了,不忍心每次都去用那么长的时间查看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就变得独立了。

 

 

C#----List<>,DataTable,DataView的使用,布布扣,bubuko.com

C#----List<>,DataTable,DataView的使用

原文:http://www.cnblogs.com/ddx-deng/p/3773077.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!