zoukankan      html  css  js  c++  java
  • DataView RowFilter

    DataView类用来表示定制的DataTable的视图。

    DataTableDataView的关系是遵循著名的设计模式--文档/视图模式,其中DataTable是文档,而Dataview是视图。

    DataView的Table属性指向相应的数据表,但DataTable并不保存过滤信息。既是对DataView改变之后,DataTable表并不会发生任何变化。

    DataView一般通过DataTable.DefaultView 属性来建立,再通过RowFilter 属性RowStateFilter 属性建立这个DataTable的一个子集。

    创建DataView

    Method1:DataView同已经存在的、很可能是非空的DataTable对象连接

    DataView dv; 
    dv = new DataView(theDataSet.Tables["Employees"]);

    Method2:先创建一个新的视图,然后再用Table属性同表相关联

    DataView dv = new DataView(); 
    dv.Table = theDataSet.Tables["Employees"]; 
    (DataView构造函数使你由DataTable中得到一个DataView对象。如果需要,反之亦可。事实上,DataTable对象的DefaultView属性返回一个该表的DataView对象。 )
    DataView dv = dt.DefaultView;

    设置过滤:  

    RowFilter是一个可读写的属性,用来读取和设置表过滤的表达式。

    public virtual string RowFilter {get; set;}

    你可以用列名,逻辑和数字运算符和常量的任意合法组合组成表达式。

    dv.RowFilter = "Country = 'USA'"; 
    dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#" 
    dv.RowFilter = "Description LIKE '*product*'"

    dv.RowFilter = "employeeID IN (2,4,5)"

    (其中字符串必须以单引号括起,而日期型必须以#符号括起。字符型值可以使用小数点和科学计数法。)

    要访问视图中某一行,可以使用DataRowView类。

    总的来说,DataRow最多有四种状态:default,original,current和proposed。这些状态由DataRowVersion枚举类型设置,由RowVersion属性表达。

    使用RowFilter过滤的示例:(下列代码在GridView的RowDataBound事件中)

    DataRowView drV = e.Row.DataItem as DataRowView; //获取GridView当前行的视图               

    string strPartNumber = drV["strPartNumber"].ToString(); //获取drV行中的strPartNumber字段               

    DataView dv = dt_D.DefaultView;  //dt_D为已经从数据库中抓取出来的表              

    dv.RowFilter = "strPartNumber='" + strPartNumber + "'";//设置过滤条件为dv视图中’strPartNumber‘列的值为从当前的GridView的行中获取的料号(strPartNumber)            

    StringBuilder strFilter = new StringBuilder();  //strFilter用于存放过滤后的dv视图的数据,并将其存放到指定的Table表格              

    strFilter.Append("<table id='table_info' cellpadding='3'>");   //id='table_info'定义了Table表格的样式,cellpadding='3'设置字符和边框的间距

    strFilter.Append("");                

    foreach (DataRowView drv in dv)    //遍历过滤后的dv视图的每一行            

    {                    

      strFilter.Append("<tr><td>");                    

      strFilter.Append(drv["strmono"].ToString()); //取得工单号(strmono)                   

      strFilter.Append("</td><td>");                    

        strFilter.Append((Convert.ToInt32( drv["nummoqty"])*Convert.ToInt32(drv["qty"])).ToString());  //取得该工单中此料号的总用量( nummoqty为工单数,qty为该料号在BOM中的用量)                 

      strFilter.Append("</td></tr>");                

    }                

    strFilter.Append("</table>");               

    e.Row.Cells[5].Text = strFilter.ToString();//将得到的表格添加进GridView的指定单元格

     
  • 相关阅读:
    【leetcode❤python】 1. Two Sum
    【leetcode❤python】 67. Add Binary
    【leetcode❤python】 396. Rotate Function
    【leetcode❤python】 400. Nth Digit
    【leetcode❤python】 160. Intersection of Two Linked Lists
    【leetcode❤python】 203. Remove Linked List Elements
    【leetcode❤python】 225. Implement Stack using Queues
    Kotlin:【标准库函数】apply(配置函数)、let、run函数
    Kotlin:【字符串操作】substring、split、replace、字符串比较==与===、foreach遍历字符
    Kotlin:【针对空安全管理的操作】安全调用操作符、使用带let的安全调用、非空断言操作符(感叹号操作符)、使用if判断null值情况、使用空合并操作符(类似三元表达式)
  • 原文地址:https://www.cnblogs.com/ljs-13/p/12126451.html
Copyright © 2011-2022 走看看