C# 将包含DataRow对象的ArrayList绑定到DataGridView.DataSource
我正在尝试将名为C# 将包含DataRow对象的ArrayList绑定到DataGridView.DataSource,c#,.net,winforms,arraylist,datagridview,C#,.net,Winforms,Arraylist,Datagridview,我正在尝试将名为duplicates的ArrayList中的项目绑定到DataGridView。但是,它并没有显示来自ArrayListItemArray的数据,这正是我想要的,而是显示元数据 duplicates是类型ArrayList: duplicates = compare.FindDuplicates(existingLeadFilePath, newLeadFilePath); gridViewMain.DataSource = duplicates; 结果 据我所知,您希望将这
duplicates
的ArrayList
中的项目绑定到DataGridView
。但是,它并没有显示来自ArrayList
ItemArray
的数据,这正是我想要的,而是显示元数据
duplicates
是类型ArrayList
:
duplicates = compare.FindDuplicates(existingLeadFilePath, newLeadFilePath);
gridViewMain.DataSource = duplicates;
结果
据我所知,您希望将这些数字绑定到datagridview。您要做的是将一个数组列表与一些对象绑定,这些对象具有您想要作为成员的数组,这就是datagridview显示的内容 尽量不要使用包含5个项的数组,而是使用包含5个成员的类,然后使用这些对象的列表作为数据源 可在此处找到扩展教程:
请原谅我的英语不好,我正在用手机写信。据我所知,您想将这些号码绑定到datagridview。您要做的是将一个数组列表与一些对象绑定,这些对象具有您想要作为成员的数组,这就是datagridview显示的内容 尽量不要使用包含5个项的数组,而是使用包含5个成员的类,然后使用这些对象的列表作为数据源 可在此处找到扩展教程:
请原谅我的英语不好,我在用手机写东西。如果你改变
FindDuplicates()
方法,返回一个强类型的列表
,里面有一个真正的类型,这个问题就会消失。然后DataGridView具有实际属性,可以查看这些属性以了解要创建哪些列
ArrayList已经死了。您几乎不应该在新代码中使用它们。即使您合法地找不到与
列表
一起使用的真正类型,列表
仍然是比ArrayList
更好的选择,因为它向维护人员传达了基本对象类型才是您真正想要的,并且如果您能够获得更强大的类型(如接口),它会让您更容易更改将来。如果将FindDuplicates()
方法改为返回一个强类型的列表,其中包含一个实类型,那么这个问题就会消失。然后DataGridView具有实际属性,可以查看这些属性以了解要创建哪些列
ArrayList已经死了。您几乎不应该在新代码中使用它们。即使您合法地找不到与列表
一起使用的真正类型,列表
仍然是比ArrayList
更好的选择,因为它向维护人员传达了基本对象类型才是您真正想要的,并且如果您能够获得更强大的类型(如接口),它会让您更容易更改将来。您试图显示一个数组列表
,其中包含一些数据行
对象,数据网格视图
正在显示数据行
的属性。这是意料之中的
但是您应该注意到,当您在DataGridView
中显示DataTable
时,控件显示的是列而不是属性
为什么?显示DataTable
和显示DataRow
对象列表有什么区别?
不同之处在于,DataGridView
显示了DataTable
的DefaultView
属性,该属性属于实现的DataView
类型。因此,它只显示了从DataTable
请求的实际返回内容,它是一个表列列表
如何在DataGridView
中显示DataRow
对象的列表?
只需将它们添加到与原始表具有相同模式的表中。例如:
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
。您有不同的选项,例如使用DataTable的Clone
方法创建具有相同架构的空DataTable,使用copy
方法创建数据和架构的副本,使用AsDataView
和AsEnumerable
和AsEnumerable()执行一些搜索
等等。您试图显示一个包含一些DataRow
对象的ArrayList
,而DataGridView
正在显示DataRow
的属性。这是意料之中的
但是您应该注意到,当您在DataGridView
中显示DataTable
时,控件显示的是列而不是属性
为什么?显示DataTable
和显示DataRow
对象列表有什么区别?
不同之处在于,DataGridView
显示了DataTable
的DefaultView
属性,该属性属于实现的DataView
类型。因此,它只显示了从DataTable
请求的实际返回内容,它是一个表列列表
如何在DataGridView
中显示DataRow
对象的列表?
只需将它们添加到与原始表具有相同模式的表中。例如:
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
。您有不同的选项,例如使用DataTable的Clone
方法创建具有相同架构的空DataTable,使用copy
方法创建数据和架构的副本,使用AsDataView
和AsEnumerable
和AsEnumerable()执行一些搜索
等等。不要发布图像。不是每个人都能看到他们,这让我们更难帮助你。。。这意味着你不太可能得到一个好答案。将这些图像转换为文本块。另外。。。发布FindDuplicates()方法会有所帮助。不要发布图像。并不是每个人都能看到它们,这让它成为现实