对dataGridView和DataTable使用DataView进行多次查询

参考自:http://www.cnblogs.com/Spirithero/archive/2011/07/20/2111351.html

重点在于DataView是DateTable相关联的一个视图而已,无论你如何使用RowFilter,DataView虽然被改变,但DateTable数据不会减少,所以你不要幻想连续使用多个RowFilter 来得到叠加过滤的效果,一个DataView只支持一个RowFilter,你只能使用 not ,and 来连接多个过滤条件。

DataTable dt = DataView.ToTable(); //获取过滤结果表格

DataTable dt = DataView.Table;  //获取的是原来构造DataView的那个原表(没有过滤之前的那个表)。
    但是可以通过保留上次查询过滤的结果表格,下次查询时,以保留的表格为查询对象,可以实现多次过滤查询。

控件截图:
这里写图片描述

全局变量:

    DataTable pTable;  //原始结果表格
    DataTable multQueryTable;  //多次查询结果表格

主要代码:

//查询
        private void btnFilter_Click(object sender, EventArgs e)
        {

            string strField = comBField.Text.ToString();  //查询字段
            string strSymbol = comBsymbol.SelectedItem.ToString();  //查询符号
            string strTarget = textFind.Text;  //查询对象
            if (string.IsNullOrEmpty(strField) || string.IsNullOrEmpty(strTarget)||string.IsNullOrEmpty(strSymbol))  //判断查询语句是否满足条件
            {
                MessageBox.Show("查询内容不能为空!");
                return;
            }
            DataTable sqlTable = pTable.Copy();  //原始结果表格复制给查询表格,以保留原始结果
            DataView curDV;
            if (checkMultQuery.Checked == true && multQueryTable !=null )  //判断是否多次查询
            {
                curDV = multQueryTable.DefaultView;  //获取多次查询表格的视图
            }
            else
            {
                curDV = sqlTable.DefaultView;  //获取原始表格的自定义视图
            }

            string strSQL;  //查询语句
            if (strSymbol == "LIKE")  //模糊查询
            {
                strSQL = strField + " LIKE '%" + strTarget + "%'";
            }
            else  
            {
                strSQL = strField + " " + strSymbol + " " + strTarget;  //条件查询
            }
            curDV.RowFilter = strSQL;  //筛选满足条件的行数据
            dataGridView.DataSource = curDV;  //绑定查询结果到数据视图
            multQueryTable = curDV.ToTable();  //获取查询过滤结果的表格


        }

重置,即显示原始表格:

//重置
        private void btnReset_Click(object sender, EventArgs e)
        {
            if (pTable!= null)  //如果原始表格非空
            {
                dataGridView.DataSource = pTable;  //绑定原始结果表格
            }
        }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值