将一组数据行绑定到datagridview

时间:2013-07-04 10:51:04

标签: c# winforms datagridview datarow

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

任何建议?

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

3 个答案:

答案 0 :(得分:2)

来自MSDN

  

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

     

IList接口,包括一维数组。

     

IListSource接口,例如   DataTable和DataSet类。

     

IBindingList接口,例如   BindingList类。

     

IBindingListView接口,如   BindingSource类。

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

  

主要的一个是对象实现IList或者是   一维数组。问题是,数组具有默认行为   用于数据绑定 - 反射。数组中的对象类型是   反映发现其未编入索引的公共财产   具有可以在网格中表示的值类型。这些   然后,在数据绑定发生时,将属性用作字段。   由于数组中的数据类型是DataRow,因此有六个公共数据类型   properties:HasErrors,Item,ItemArray,RowError,RowState和   表。但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属性。

答案 1 :(得分:0)

您是否测试过dgvProductExp.DataSource.Tables(0).Rows.Count? ..如果显示0那就是原因..

或者你确定它不是

string strFilterOption = "dtcolnPurchaseProductExpProductNo='270'";

答案 2 :(得分:0)

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

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