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

     
  • 相关阅读:
    android系统webview使用input实现选择文件并预览
    在列表中动态设置元素的id
    Vue使用Clipboard.JS在h5页面中复制内容
    Vue使用v-for显示列表时,数组里的item数据更新,视图中列表不同步更新的解决方法
    Vue子组件和根组件的关系
    Vue生命周期和钩子函数及使用keeplive缓存页面不重新加载
    Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现
    Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现
    Python与数据结构[1] -> 栈/Stack[1] -> 中缀表达式与后缀表达式的转换和计算
    Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
  • 原文地址:https://www.cnblogs.com/ljs-13/p/12126451.html
Copyright © 2020-2023  润新知