C# 合并ILists以绑定datagridview以避免使用数据库视图
在我们的表单中,IntaktsBudgetsType是一个名称很差的枚举,它只指定在客户或产品之后填充datagridview,您在产品或客户之后进行预算C# 合并ILists以绑定datagridview以避免使用数据库视图,c#,linq,datagridview,C#,Linq,Datagridview,在我们的表单中,IntaktsBudgetsType是一个名称很差的枚举,它只指定在客户或产品之后填充datagridview,您在产品或客户之后进行预算 private void UpdateGridView() { bs = new BindingSource(); bs.DataSource = intaktsbudget.GetDataSource(this.comboBoxKundID.Text, IntaktsBudgetsType.PerKund); d
private void UpdateGridView() {
bs = new BindingSource();
bs.DataSource = intaktsbudget.GetDataSource(this.comboBoxKundID.Text, IntaktsBudgetsType.PerKund);
dataGridViewIntaktPerKund.DataSource = bs;
}
这将使用合并产品、预算和客户表的数据库视图填充datagridview
逻辑使用以下方法从只执行GetTable.ToList的存储库中获取正确的IList集
现在我不想使用数据库视图,因为它是只读的,我希望能够在datagridview上执行CRUD操作
我可以构建一个类,作为整个事件的包装器,并将不同的表值绑定到类属性,但这似乎不太正确,因为我必须为每一个需要合并的事情都这样做
一些非常重要的、可能是基本的东西正在失去思考过程,但在谷歌和书籍上度过了一个周末后,我放弃了,转而求助于SO社区。我并不认为你有什么问题。您可以创建一个通用的IList,它支持一系列IList作为构造函数,并基本上公开它们。这可以归结为许多管道代码,但非常通用。IList只需要跟踪每个项目与哪个原始列表相关,这样它就可以正确地转发删除操作。对不起,我不太明白你的建议。你能用一段代码来更新答案吗?遗憾的是不能。我在这里有代码,但它大约有10页长;不过并不复杂。它被称为BindingListView,允许组合x列表输入以及筛选暴露的元素。如果只存在大小问题,则存在粘贴服务,如Pastebin
public IEnumerable<IntaktsBudgetView> GetDataSource(string id, IntaktsBudgetsType type)
{
IList<IntaktsBudgetView> list = repository.SelectTable<IntaktsBudgetView>();
switch (type)
{
case IntaktsBudgetsType.PerKund:
return from i in list
where i.kundId == id
select i;
case IntaktsBudgetsType.PerProdukt:
return from i in list
where i.produktId == id
select i;
}
return null;
}