今天使用到DataTable的select()方法遇到了一个问题 看代码
var row = dt.Select("status='未下载'");
当使用查询后,得到的行集合的列名会消失,如果此时只拿行集合给dataview赋值,则表格会显示空白数据。
经过一番百度,解决了这个问题。
Select方法的返回的是包含查询到的数据的DataRow,但是这个DataRow只是被查询的DataTable的一个映射,所以DataRow是随着DataTable的行变化而变化的。
所以,要想把返回的DataRow放进数据显示控件中,需要将其放入另一个DataTable中。
另外,在一个新表中插入行,不能直接用DataTable.Rows.Add(DataRow)的方式,因为这样是插入一个新表,也就是DataRow是空的。要用导入行的方式,DataTable.ImportRow(DataRow)。当然,前提是这个新表要有与原数据表一样的结构。
看代码
var row = dt.Select("status='未下载'"); var temp = dt.Clone();//复制表结构 foreach (var item in row) { temp.ImportRow(item);//导入行数据 }
导入行数据之后,就可以拿导入行数据的新表给dataview赋值了