【问题标题】:binding a set of datarows to datagridview将一组数据行绑定到 datagridview
【发布时间】:2013-07-04 10:51:03
【问题描述】:

我试过下面的代码,但是datagridview中什么都没有显示。

有什么建议吗?

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

【问题讨论】:

  • 不是很完整的描述。但是您是否尝试过 dgvProductExp.Databind() ?如果是这样,请发布代码和问题的完整描述。

标签: c# winforms datagridview datarow


【解决方案1】:

来自MSDN

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

IList 接口,包括一维数组。

IListSource 接口,如 DataTable 和 DataSet 类。

IBindingList 接口,如 BindingList 类。

IBindingListView 接口,如 BindingSource 类。

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

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

【讨论】:

    【解决方案2】:

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

    或者你确定不是

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        相关资源
        最近更新 更多