【问题标题】:ArrayList as a DataSource of DataGridView Not Showing DataArrayList作为DataGridView的DataSource不显示数据
【发布时间】:2017-04-08 00:12:04
【问题描述】:

我有一个 DataGridView,它有一个视图作为它的数据源 (SQL Server)。无论我做什么,我都无法使该视图读/写,因此我正在尝试解决它。我需要使一列可编辑,所以我想我可以制作一个 ArrayList 并将其设置为数据源。现在我的 DGV 中没有数据,尽管我的 ArrayList 确实包含 35 行和 4 列数据。这是我的代码:

// get the data from the Table adapter, put it into an ArrayList then display it in the DataGridView -- called from Load()

private void FillReportDistributionTX()
{
    DataTable dt = this.dLV_ReportDistributionTableAdapter.GetData();
    DGVlist = ConvertDTtoArray(ref dt);
    dLV_UserReportsDataGridView.DataSource = DGVlist;
    dLV_UserReportsDataGridView.Refresh();
 }

// convert to Array
public ArrayList ConvertDTtoArray(ref DataTable dt)
{
    ArrayList converted = new ArrayList(dt.Rows.Count);
    foreach (DataRow row in dt.Rows)
    {
        converted.Add(row);
    }

    return converted;

}

这让我完全被难住了。任何帮助或建议将不胜感激。

【问题讨论】:

    标签: c# .net winforms arraylist datagridview


    【解决方案1】:

    当您将包含一些 DataRow 的数组列表设置为 DataSourceDataGridView 时,您将看到这些列:

    RowError | RowState | Table | HasErrors
    

    这是因为DataGridView 将显示DataRow 的可浏览属性。

    但为什么DataTable 中的相同行会按预期显示列?

    这是因为用于数据绑定的DataTableDataView 实现了ITypedList 接口,该接口提供了发现可绑定列表架构的功能,其中可用于绑定的属性不同于要绑定的对象。实际上它返回一个PropertyDescriptorCollection,其中包含一些基于ColumnsDataTable 创建的属性描述符。

    【讨论】:

    • 顺便说一下,ArrayList 是一种遗留类型,如果您想使用所有元素都属于同一类型的元素列表,您可以使用List<T>。但是List<DataRow> 这里没有帮助,它就像数组列表一样工作。阅读答案的第二部分,了解原因。
    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2011-07-31
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多