将dgv数据源BindingList转换为List时出现错误提示

leon51 2019-10-15 09:28:17
我使用下面的语句将dgv数据源BindingList转换为List时出现错误提示:
无法将类型为“System.Collections.Generic.List`1[BitSection.Models.Hole]”的对象强制转换为类型“System.ComponentModel.BindingList`1[BitSection.Models.Hole]”。
请问如何更改?是否是数据有问题?

IList<Hole> list = new List<Hole>((BindingList<Hole>)dgvControlledDepthDrilling.DataSource);


...全文
81 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon51 2019-10-17
换个思路就可以了,过滤的时候隐藏行就可以了
回复
leon51 2019-10-16
引用 5 楼 exception92 的回复:
使用BindingList 就无需对DataSource进行赋值,而是使用dgv的Bind模式,将list与datasource绑定起来,无论过滤还是排序,直接操作list即可。 无任何内容就自己想debug一下bindingListHoles有数据,或者where中的条件成立。
感谢版主的回复,但我有疑问: 我希望用户可以选择dgv时呈现完整或部分数据,dgv中的任何修改需反映到数据源中,数据源数据必须是完整的,最终我要通过API保存到应用程序中。 如果不对DataSource重新赋值,如何实现?如何“使用dgv的Bind模式,将list与datasource绑定起来”?可以帮忙修改下上面的代码吗?非常感谢。
回复
exception92 2019-10-16
使用BindingList 就无需对DataSource进行赋值,而是使用dgv的Bind模式,将list与datasource绑定起来,无论过滤还是排序,直接操作list即可。 无任何内容就自己想debug一下bindingListHoles有数据,或者where中的条件成立。
回复
leon51 2019-10-16
请忽略上面第二段代码第5行
回复
leon51 2019-10-16
问题又来了,绑定我是这样写的
private BindingList<Hole> bindingListHoles;

private void Update()
{
	var list = new List<Hole>();
	for (int i = 0; i < 10; i++)
	{
		Hole Hole = new Hole();
		hole.Index=i;
		hole.Name="H"+i;
		list.Add(hole);
	}
	bindingListHoles = new BindingList<Hole>(list);
	dgv.DataSource = bindingListHoles;
}
我希望在改变combobox时进行筛选,但下面代码有问题,导致dgv中无任何内容。请问如何修改?
//改变cmbName时对dgv中的数据重新筛选
private void cmbName_SelectedIndexChanged(object sender, EventArgs e)
{
	string cmbName = cmbName.Text.Trim();
	var list = BindingListToList(); 
	if (cmbName == "All" || cmbName == string.Empty)
	{
		dgv.DataSource = bindingListHoles.OrderBy(h => h.Index);
	}
	else
	{
		var query = bindingListHoles.Where(h => h.Name == cmbName).OrderBy(h => h.Index);
		dgv.DataSource = query;
	}
}
而且还有一个问题,程序需要按Name进行筛选,无论是列出全部或部分数据,我都希望dgv中的改变完整的反映在bindingListHoles里面,这样是否可行?
回复
leon51 2019-10-16
找到原因了,原来中间DataSource又重新绑定了List<T>
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.