3

我尝试了以下代码,但 datagridview 中没有显示任何内容。

有什么建议么?

string strFilterOption = "dtcolnPurchaseProductExpProductNo=270";
dgvProductExp.DataSource = dtPurchaseProductExp.Select(strFilterOption);
4

3 回答 3

2

来自MSDN

DataGridView 类支持标准的 Windows 窗体数据绑定模型。这意味着数据源可以是实现以下接口之一的任何类型:

IList 接口,包括一维数组。

IListSource 接口,例如 DataTable 和 DataSet 类。

IBindingList 接口,例如 BindingList 类。

IBindingListView 接口,例如 BindingSource 类。

由于与数组进行数据绑定的默认行为,您不能为 DataSource 属性设置 Datatable.Select 方法将返回的 Datarows 数组。从这篇文章

第一个是对象实现了 IList 或者是一维数组。问题是,数组具有数据绑定的默认行为 - 反射。反映数组中的对象类型以发现其未索引的公共属性以及可以在网格中表示的值类型。然后,当数据绑定发生时,这些属性将用作字段。由于数组中的数据类型是 DataRow,因此有六个公共属性:HasErrors、Item、ItemArray、RowError、RowState 和 Table。但是Item是索引属性,ItemArray是Object()类型,不能在gridview中显示,所以这两个属性被忽略,其他四个显示在grid中。

因此,另一种方法是创建一个新的 DataTable,使用 Clone 方法从 DataTable 源获取架构,并使用 DataRows 数组填充新的 DataTable。

string strFilterOption = "dtcolnPurchaseProductExpProductNo=270";
DataTable cloneTable;
cloneTable = dtPurchaseProductExp.Clone();
foreach (DataRow row in dtPurchaseProductExp.Select(strFilterOption))
{
   cloneTable.ImportRow(row);
}
dgvProductExp.DataSource = cloneTable;

或者,您也可以通过 BindingSource 对象进行绑定并使用其 Filter 属性。

于 2013-07-04T18:53:01.620 回答
1

你测试了dgvProductExp.DataSource.Tables(0).Rows.Count吗?..如果它表明0这就是为什么..

或者你确定不是

string strFilterOption = "dtcolnPurchaseProductExpProductNo='270'";?

于 2013-07-04T16:52:29.097 回答
1

如果有人遇到类似问题,最简单的方法是将数据行数组转换回数据表,然后设置网格视图数据源。

dgvProductExp.DataSource = dtPurchaseProductExp.Select(strFilterOption).CopyToDataTable();
于 2018-09-11T15:55:59.333 回答