将包含DataRow对象的ArrayList绑定到DataGridView.DataSource

时间:2017-10-11 20:09:39

标签: c# .net winforms arraylist datagridview

我尝试将名为ArrayList的{​​{1}}的项目绑定到duplicates。但是,它没有显示来自DataGridView ArrayList的数据,这是我想要的,而是显示元数据。

ItemArray的类型为duplicates

ArrayList

结果

Results I get

Results I require To be displayed

3 个答案:

答案 0 :(得分:0)

据我所知,您希望将这些数字绑定到datagridview。你正在做的是绑定一个数组列表与一些具有你想要的成员的数组的对象,这就是datagridview显示的内容。

尽量不要使用包含5个项目的数组,而是使用包含5个成员的类,然后使用这些对象的列表作为数据源。

可以在此处找到扩展教程:http://www.c-sharpcorner.com/article/binding-an-arraylist-with-datagrid-control/

请原谅我的英语不好,我是用手机写的。

答案 1 :(得分:0)

如果您更改FindDuplicates()方法而不是返回具有真实类型的强类型List<T>,则此问题就会消失。然后,DataGridView具有可以查看的实际属性,以了解要创建的列。

ArrayLists已经死了。你几乎不应该在新代码中使用它们。即使您合法地找不到与List<T>一起使用的真实类型,List<Object>仍然是ArrayList的更好选择,因为它与维护者通信基础对象类型是真的是你想要的,如果你将来能够获得更强大的类型(如界面),它会让你更容易改变。

答案 2 :(得分:0)

您正试图展示包含一些ArrayList个对象的DataRow,而DataGridView正在显示DataRow的属性。这是预期的。

但是,您可能已经注意到,当您在DataTable中显示DataGridView时,控件会显示列而不是属性。

<强>为什么呢?显示DataTable和显示DataRow个对象列表之间的区别是什么?

不同之处在于DataGridView显示DefaultView的{​​{1}}属性,DataTable属于DataView,实现ITypedList。因此,它显示了GetItemProperties返回的内容,实际上是DataTable提出的,并且它是表格列的列表。

如何在DataRow中显示DataGridView对象列表?

只需将它们添加到具有origibal表相同模式的表中即可。例如:

private void Form1_Load(object sender, EventArgs e)
{
    var originalTable = new DataTable();
    originalTable.Columns.Add("C1");
    originalTable.Columns.Add("C2");

    //Original data
    originalTable.Rows.Add("A", "B");
    originalTable.Rows.Add("X", "Y");
    originalTable.Rows.Add("A", "B");
    originalTable.Rows.Add("X", "Y");

    //An ArrayList containing duplicate DataRow objects
    var duplicates = new System.Collections.ArrayList();
    duplicates.Add(originalTable.Rows[2]);
    duplicates.Add(originalTable.Rows[3]);

    //Create a Table having the same schema of the original table
    var duplicatesTable = originalTable.Clone();

    //Add copy of duplicates to the duplicate table
    foreach (DataRow item in duplicates)
    {
        duplicatesTable.Rows.Add(item.ItemArray);
    }
    this.dataGridView1.DataSource = duplicates;
}

注意

使用ArrayList时,您不需要使用DataTable。您有不同的选项,例如使用DataTable的Clone方法创建具有相同模式的空DataTable,使用Copy方法创建数据和模式的副本,使用AsDataView和{{执行一些搜索1}}和AsEnumerable等等。