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是已存在的表