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的指定单元格

    让技术改变未来,让技术影响人们生活方式
  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/huangtaiyu/p/5785158.html
Copyright © 2011-2022 走看看