将一组数据行绑定到datagridview

本文关键字:绑定 datagridview 数据 一组 | 更新日期: 2023-09-27 18:20:55

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

有什么建议吗?

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

将一组数据行绑定到datagridview

来自MSDN

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

IList接口,包括一维数组。

IListSource接口,例如DataTable和DataSet类。

IBindingList接口,例如BindingList类。

IBindingListView接口,例如BindingSource类。

由于具有数组的数据绑定的默认行为,不能为DataSource属性设置Datatable.Select方法将返回的Datarows数组。来自这篇文章:

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

因此,另一种方法是创建一个新的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属性。

你测试过dgvProductExp.DataSource.Tables(0).Rows.Count吗。。如果它显示0,那就是为什么。。

或者你确定它不是

string strFilterOption = "dtcolnPurchaseProductExpProductNo='270'";

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

dgvProductExp.DataSource = dtPurchaseProductExp.Select(strFilterOption).CopyToDataTable();