将一组数据行绑定到datagridview

问题描述 投票:2回答:3

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

有什么建议?

string strFilterOption = "dtcolnPurchaseProductExpProductNo=270";
dgvProductExp.DataSource = dtPurchaseProductExp.Select(strFilterOption);
c# winforms datagridview datarow
3个回答
2
投票

来自MSDN

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

IList接口,包括一维数组。

IListSource接口,例如DataTable和DataSet类。

IBindingList接口,例如BindingList类。

IBindingListView接口,例如BindingSource类。

由于数据绑定与数组的默认行为,您无法为DataSource属性设置Datatable.Data方法将返回的Datarows数组。来自this post

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

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


0
投票

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

或者你确定不是

string strFilterOption = "dtcolnPurchaseProductExpProductNo='270'";


0
投票

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

dgvProductExp.DataSource = dtPurchaseProductExp.Select(strFilterOption).CopyToDataTable();
© www.soinside.com 2019 - 2024. All rights reserved.