我尝试从简单的MS Access数据库查询表,本地文件,查询有效,但我无法将其设置为DataSoruce:
IEnumerable<DataRow> result = from row in bDSpitalDataSet.Tabel.AsEnumerable()
where row.Varsta >= up &&
row.Varsta <= down &&
row.CNP.StartsWith(Convert.ToString(sex))
select row;
DataTable resultTable = result.CopyToDataTable<DataRow>();
tabelBindingSource.DataSource = resultTable;
dataGridView1.Update();
所以我在InvalidOperationException
获得DataTable resultTable = result.CopyToDataTable<DataRow>();
操作。有什么想法吗?
答案 0 :(得分:3)
我假设[1](编辑:现已由OP确认)您未在tabelBindingSource.DataSource = resultTable
但在result.CopyToDataTable<DataRow>()
获得例外,因为查询没有& #39; t包含任何DataRows。新DataTable
的列将从DataRow.Table.Columns
派生,如果没有行,则没有信息。
例外是documented:
InvalidOperationException
:
DataRow
状态为Deleted
。DataRow
个对象。DataRow
为null
。您可以使用Any
进行检查:
if(result.Any())
{
DataTable resultTable = result.CopyToDataTable<DataRow>();
tabelBindingSource.DataSource = resultTable;
dataGridView1.Update();
}
更有效的方法:
DataTable resultTable = bDSpitalDataSet.Tabel.Clone();
foreach(DataRow row in result.Rows)
resultTable.LoadDataRow(row.ItemArray, false);
效率更高,因为result.Any()
需要执行查询以确定是否至少有一行,result.CopyToDataTable<DataRow>()
再次执行该行。
[1]为什么我认为你提到了错误的错误线?由于你的评论:
未处理的类型&#39; System.InvalidOperationException&#39;发生在System.Data.DataSetExtensions.dll
中