2013-07-04 90 views
2

我试过了下面的代码,但datagridview中没有显示任何内容。将一组数据行绑定到datagridview

有什么建议吗?

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

不是一个非常完整的描述。但你有没有试过'dgvProductExp.Databind()'?如果是这样,请发布代码和问题的完整说明。 – saamorim

回答

2

MSDN

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

IList接口,包括一维数组。

IListSource接口,如 的DataTable和DataSet类。

IBindingList接口,如 的BindingList类。

IBindingListView接口,如 BindingSource类。

由于数组绑定的默认行为,因此无法为DataSource属性设置Datatable.Select方法将返回的Datarows数组。从this post

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

因此,另一种方法将创建一个新的DataTable,使用Clone方法从DataTable源获取模式,并使用DataRow数组填充新的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'";