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

    让技术改变未来,让技术影响人们生活方式
  • 相关阅读:
    Atcoder Grand Contest 003 题解
    Atcoder Grand Contest 002 题解
    Atcoder Grand Contest 001 题解
    网络流24题
    AGC005D ~K Perm Counting
    loj6089 小Y的背包计数问题
    CF932E Team Work
    组合数学相关
    SPOJ REPEATS
    [SDOI2008]Sandy的卡片
  • 原文地址:https://www.cnblogs.com/huangtaiyu/p/5785158.html
Copyright © 2020-2023  润新知