将包含DataRow对象的ArrayList绑定到DataGridView.DataSource
我试图将项目从ArrayList
称为duplicates
到DataGridView
。但它不显示来自ArrayList
ItemArray
的数据,这是我想要的,而是显示元数据。将包含DataRow对象的ArrayList绑定到DataGridView.DataSource
duplicates
是ArrayList
类型:
duplicates = compare.FindDuplicates(existingLeadFilePath, newLeadFilePath);
gridViewMain.DataSource = duplicates;
结果
您试图显示一个ArrayList
,其中包含一些DataRow
对象,而DataGridView
显示DataRow
的属性。它是预期的。
但可能你已经注意到,当你在DataGridView
中显示DataTable
时,控件显示的是列而不是属性。
为什么?显示DataTable
并显示DataRow
对象列表有什么区别?
这里的区别是,DataGridView
显示DataTable
这是DataView
类型它实现ITypedList
的DefaultView
属性。因此,它显示了GetItemProperties
返回的内容,实际上是从DataTable
询问的,它是表列的列表。
如何在DataGridView
中显示DataRow
对象的列表?
只需将它们添加到具有相同原始表格架构的表格即可。对于examle:
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;
}
注意
你并不需要DataTable
工作时使用ArrayList
。您有不同的选项,例如使用Clone
方法DataTable创建具有相同架构的空DataTable,使用Copy
方法创建数据和架构副本,使用AsDataView
和AsEnumerable
和AsEnumerable().CopyToDataTable()
等执行一些搜索。
我完全了解它,并一直致力于修复错误,现在它可以工作。对不起,迟到的答复和谢谢。 –
太棒了!别客气 :) –
至于我可以看到你想要这些号码绑定到DataGridView。你正在做的是将一个数组列表绑定到一些对象上,这些对象拥有这个数组作为成员,这就是datagridview显示的内容。
尽量不要使用5个项目的数组,而是使用5个成员的类,然后使用这些对象的列表作为数据源。
扩展的教程可以在这里找到:http://www.c-sharpcorner.com/article/binding-an-arraylist-with-datagrid-control/
请原谅我的英语不好,我是从我的手机写。
如果将FindDuplicates()
方法更改为返回带有实型的强类型List<T>
,则此问题消失。然后DataGridView具有它可以查看的实际属性以知道要创建的列。
ArrayLists已死亡。你应该几乎不会在新代码中使用它们。即使您合法地无法找到与List<T>
一起使用的真实类型,但与ArrayList
相比,List<Object>
仍然是更好的选择,因为它向维护人员传达基础对象类型实际上是您想要的,并且它为您提供了更轻松如果您将来能够获得更强大的类型(如界面),则可以改变。
请勿发布图片。不是每个人都可以看到它们,这使我们很难帮助你...意味着你不太可能得到一个好的答案。将这些图像转换为文本块。 –
另外...发布FindDuplicates()方法将有所帮助。 –