Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 合并ILists以绑定datagridview以避免使用数据库视图_C#_Linq_Datagridview - Fatal编程技术网

C# 合并ILists以绑定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

在我们的表单中,IntaktsBudgetsType是一个名称很差的枚举,它只指定在客户或产品之后填充datagridview,您在产品或客户之后进行预算

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;
        }