zoukankan      html  css  js  c++  java
  • DataTable 和 DataView 的使用技巧

    1. DataTable类的搜索和筛选功能 
    l 根据主键值查找行 
    DataRowCollection类的Find方法,接受包含要查找行的主键值为参数,因为是根据主键值查找,所以仅返回一个DataRow。 
    DataTable tbl=new DataTable(“Customers”); 
    da.Fill(tbl); 
    tbl.PrimaryKey=new DataColumn[] {tbl.Columns[“CustomerID”]}; 
    DataRow row=tbl.Rows.Find(“ALFKI”); 
    if((row<>null) 
    consol.WriteLine(…); 
    如果主键为复合键,则应将一个对象数组传递给Find方法,其中数组中的项对应于包含该主键的DataColumn。 
    tbl.PrimaryKey=new DataColumn[] {tbl.Columns[“OrderID”], 
    tbl.Columns[“ProductID”]}; 
    Object[] objCriteria=new object[] {10643,28}; //object对象数组 
    DataRow row=tbl.Rows.Find(objCriteria); 
    l 执行动态的复杂搜索-Select方法 
    DataTable类的Select方法接受类似于SQL查询中的Where条件语句为参数,返回DataRowCollection对象。 
    DataTable tbl=new DataTable(“Customers”); 
    da.Fill(tbl); 
    sting strFilter; 
    strFilter=”Country=’USA’ and City <>’Seattle’”; 
    foreach(DataRow row in tbl.Select(strFilter)) 
    Consol.WriteLine(…); 
    Select方法的参数字符串接受使用*或%作为通配符进行模糊查询,例如”State like ‘New%’”查找State字段以”New”开头的数据行。另外如果搜索字符串中涉及日期,其值用双#包含而不使用双单引号。 
    重载的Select 方法可包含第二个参数,控制搜索结果行的排序顺序。 
    strSortOrder=”City DESC” ;//搜索结果按City字段降序排列 
    tbl.Select(strFilter,strSortOrder); 
    重载的Select方法亦可包含第三个参数,指定DataViewRowState枚举的一个值,控制Select方法仅搜索指定状态的DataRow。 
    DataViewRowState dvrs=DataViewRowState.ModifiedCurrent; 
    tbl.Select(“”,””,dvrs);//前二个参数为空,仅使用第三个参数 
    2. DataView对象 
    DataTable对象的Select方法功能强大,但执行效率不高,而且Windows和Web窗体不支持绑定Select方法的返回值-DataRow对象数组。DataView对象解决了以上两点不足。DataView对象不维护自己的数据附本,当通过DataView访问数据时,它将返回存储在相应DataTable中的数据。 
    l 创建DataView对象 
    DataView对象必需与DataTable对象相关联,以下几种构造函数可以创建DataTable对象并与DataTable相关联。 
    DataTable tbl=new DataTable(“MyTable”); 
    DataView vue; 
    vue=new DataView(); 
    vue.Table=tbl; 
    或 vue=new DataView(tbl); 
    DataView还有一个复杂的构造函数,可以设置Table、RowFilter、Sort和RowStateFilter属性,示例代码如下: 
    vue.Table=tbl; 
    vue.RowFilter=”Country=’USA’”; 
    vue.Sort=”City DESC”; 
    DataViewRowState dvrs=DataViewRowState.ModifiedOriginal; 
    vue.RowStateFilter=dvrs; //仅查看修改过的行的原始值 
    或 vue=new DataView(tbl,”Country=’USA’”,”City DESC”,dvrs); 
    DataView类的Count属性,返回可以通过DataView看到的数据行数。 
    l DataRowView类 
    DataTable类通过DataRow对象访问数据项;DataView类通过DataRowView对象访问数据项,其功能与DataRow类似。 
    DataView vue=new DataView(tbl); 
    DataRowView row=vue[0]; 
    Console.WriteLine(row[“CompanyName”]); 
    l DataView中搜索数据 
    DataView类通过RowFilter和RowStateFilter属性支持筛选,它还支持通过Find和FindRows方法搜索,其用法与DataTable类的Find方法类似。 
    Find方法 
    设置DataView对象的Sort属性后,根据Sort属性所指定的列来调用Find方法,提供一个值或一组值作为参数。Find方法的返回值是一个整型值,代表查找到的行所在DataVier中的索引,如果没查找到符合条件的值,则返回-1。 
    DataView vue=new DataView(tbl); 
    vue.Sort=”ContactName”; 
    int intIndex=vue.Find(“Fran Wilson”); 
    if(intIndex<>-1) 
    Consol.WriteLine(vue[intIndex][“CompanyName”]); 
    FindRows方法 
    DataTable的Find方法根据DataTable对象的PrimayKey属性中所指定的列进行搜索,所以至多返回一条符合条件的数据行。DataView的Find方法根据Sort属性所指定的列进行搜索,可能有多个符合条件的值,但其只返加一个符合条件的索引值。 
    DataView类提供FindRows方法来处理其返回的多个数据行,FindRows方法返回符合搜索条件的DataRowView对象数组。 
    DataView vue=new DataView(tbl); 
    vue.Sort=”Country”; 
    DataRowView[] aRows=vue.FindRows(“Spain”); 
    if(aRows.Length==0) 
    Consol.WriteLine(“No rows Find”); 
    l 修改DataRowView对象 
    DataRowView修改DataView的一行数据类似DataRow修改DataTable的一行数据,DataRowView对象也有BeginEdit、EndEdit、CancelEdit和Delete方法。 
    DataRowView的AddNew方法返回一个新的DataRowView对象,但只到其调用EndEdit方法后,新行才被真正的添加到相应的DataTable中。 
    DataView vue=new DataView(tbl); 
    DataRowView row=vue.AddNew(); 
    row[“……”]=”…”; 
    … 
    row.EndEdit(); 
    l DataView创建DataTable 
    DataView类的ToTable方法返回一个DataTable对象,其中仅包括DataView的RowFilter属性设置可见的行。 
    DataTable tblAllCustomers=new DataTable(“Customers”); 
    DataView vue=new DataView(tblAllCustomers); 
    vue.RowFilter=”Country=’Spain’”; 
    DataTable tblSpanishCustomers=vue.ToTable(“SpanishCustomers”); 
    以上代码由DataView创建的DataTable将包含DataView中所有列,可以通过DataView的ToTable的重载方法来控制生成的DataTable所包含的列。 
    DataTable tblSpanishCustomers; 
    tblSpanishCustomers=vue.ToTable(“SpanishCustomers”,true, 
    new string[] {“City”,”Country”}); 
    其中第二个参数代表是否返回的新列组合的结果集是否是唯一值。相当于SQL查询中的distinct的功能。
  • 相关阅读:
    MATLAB简易验证码识别程序介绍
    [Java面试三]JavaWeb基础知识总结.
    [Java面试十二]数据库概念相关
    [Java面试十一]数据库总结.
    [Java面试十]浏览器跨域问题.
    [Java面试九]脚本语言知识总结.
    [Java面试八]Hibernate总结以及在面试中的一些问题.
    [Java面试七]Mybatis总结以及在面试中的一些问题.
    [Java面试六]SpringMVC总结以及在面试中的一些问题.
    [Java面试五]Spring总结以及在面试中的一些问题.
  • 原文地址:https://www.cnblogs.com/zhaobl/p/1564237.html
Copyright © 2011-2022 走看看