【DataTable行筛选后添加行返回新的DataTable】

使用Select()方法

从数据库中读取数据填充到DataTable中,使用 Select()方法,筛选结果保存到一个新DataTable

选择性筛选

DataRow[] drArr = dt.Select(“C1=‘123’”);//查询(如果Select内无条件,就是查询所有的数据)
DataRow[] drArr1 = dt.Select(“C1 LIKE ‘123%’”); //模糊查询(如果的多条件筛选,可以加 and 或 or )
DataRow[] drArr2 = dt.Select(“‘123’ LIKE C1 + ‘%’”, “C2 DESC”); //另一种模糊查询的方法
DataRow[] drArr3 = dt.Select(“C1=‘123’”, “C2 DESC”); //按C2倒序排序
DataRow[] drArr4 = dt.Select(“[Student Name] Like ‘王%’”) //如果列名中间有空格 需要加一个中括号

筛选结果储存

DataTable dtNew2 = dt.Clone(); //复制结构
for (int i = 0; i < drArr.Length; i++)
{
dtNew2.ImportRow(drArr[i]); //ImportRow 是复制
}

通过方法排序实现

public void SortDataTable(DataTable dt)
{
dt.DefaultView.Sort = “id desc”;//重新设置排序
DataTable dtNew = dt.DefaultView.ToTable(); //保存在一张新表中
}

实现

每次筛选后返回新DataTable

    public static DataTable NewDataTable(string str, DataTable oldDt)
    {
        DataRow[] drArr = oldDt.Select(str);
        DataTable newDt = new DataTable();
        newDt = oldDt.Clone();    
        for (int i = 0; i < drArr.Length; i++)
        {
            newDt.ImportRow(drArr[i]);    
        }
        return newDt;
    }

每次筛选后返回行累加的DataTable

    List<DataRow> dataRows = new List<DataRow>();

    private DataTable FilterDataTable(string strFilter, DataTable orginalDt)
    {
        DataRow[] drArr = orginalDt.Select(strFilter);
        for (int i = 0; i < drArr.Length; i++)
        {
            dataRows.Add(drArr[i]);
        }
        DataTable newDt = new DataTable();
        newDt = orginalDt.Clone();
        for (int i = 0; i < dataRows.Count; i++)
        {
            newDt.ImportRow(dataRows[i]);
        }
        return newDt;
    }
    private void ClearDataList()
    {
        dataRows.Clear();
    }

调用

string str=@“姓名 like ‘王%’ and 性别 = ‘男’ and 姓名 aaa” //查找姓名列的王姓、男性,并按照姓名正序排列
dataGridView.DataSource=NewDataTable(str,myDt) //myDt是已存在的表

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值