我尝试将名为ArrayList
的{{1}}的项目绑定到duplicates
。但是,它没有显示来自DataGridView
ArrayList
的数据,这是我想要的,而是显示元数据。
ItemArray
的类型为duplicates
:
ArrayList
结果
答案 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
等等。