Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 绑定到嵌套字典的DataGridView_C#_.net_Winforms_Dictionary_Datagridview - Fatal编程技术网

C# 绑定到嵌套字典的DataGridView

C# 绑定到嵌套字典的DataGridView,c#,.net,winforms,dictionary,datagridview,C#,.net,Winforms,Dictionary,Datagridview,我试着看这个: 但这不是我想要的,所以我来了 我有一本这样的字典(只是一个例子): 并且希望有一个DataGridView(实时,从而绑定它)如下所示: +------+-----------------+-----------------+---------------+ | Name | Description | Length | Type | +------+-----------------+-----------------+-------

我试着看这个:

但这不是我想要的,所以我来了

我有一本这样的字典(只是一个例子):

并且希望有一个
DataGridView
(实时,从而绑定它)如下所示:

+------+-----------------+-----------------+---------------+
| Name |   Description   |     Length      |     Type      |
+------+-----------------+-----------------+---------------+
| var1 | the description | the length here | the type here |
+------+-----------------+-----------------+---------------+
DataGridView
将位于
TabPage
中(位于
TabController
中,该选项卡页面的名称为
var type

起初我有一本字典,每当用户想要它的
DataGridView
时,
DataGridView
就会从零开始一次又一次地生成

因此,当用户更改某些内容时,他们必须重新打开
DataGridView
或手动刷新它以查看新的更改。我不要这个。因此,我尝试为每个
var类型
设置
DataTables
(并使用
Dictionary
作为
DataTable
集合,用户在编辑某些内容时会得到实时更改

这很有效。但是当涉及到编辑特定var的信息时,我必须使用
.Select()
(并且我不能将行号存储在同一个数据表中)。我想避免这种情况,所以我又回到了一本字典。我还听说字典更轻量级

在使用
DataTables
时,我也尝试过存储每个变量的行号,以避免
.Select()
,但这种方法也存在一些问题,因此我更喜欢使用字典

我不想每次用户想看到它时都创建
DataGridView
并使用for循环(因此我使用DataTables作为属性,我可以在任何地方访问,只要在我想显示它们时将它们用作
DataSource
),我只想在任何时候都可以使用它们。这可能吗


仅供记录;是的,这是一个解析器。非常感谢!

使用以下方法之一:

            DataTable dt = new DataTable();

            Dictionary<string, DataRow> dict1 = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("Name"), y => y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

            Dictionary<string, List<DataRow>> dict2 = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("Name"), y => y)
                .ToDictionary(x => x.Key, y => y.ToList());
DataTable dt=newdatatable();
字典dict1=dt.AsEnumerable()
.GroupBy(x=>x.Field(“名称”),y=>y)
.ToDictionary(x=>x.Key,y=>y.FirstOrDefault());
字典dict2=dt.AsEnumerable()
.GroupBy(x=>x.Field(“名称”),y=>y)
.ToDictionary(x=>x.Key,y=>y.ToList());

是的,我一直在回答这样的帖子。看起来你有JSON,但看不到对象的类(也看不到字典)。我可以很容易地发布代码让你翻列表()对象,但目前没有足够的信息来完成任务。这不是一个实际的JSON,只是一个使其可读的示例。这是一个字典。我想避免每次循环,再次感谢。嘿,感谢回复。但你似乎误解了我的意图。我说过我放弃了数据表是的,现在我使用的是一个一对所有的字典。我举了一个JSON的例子,说明了字典的样子,以及我希望它成为DataGridView的样子。当向字典中添加新内容时,我想实时更改DataGridView。为什么要抛弃DataTable,它比获得JSON更有效,然后将JSON转换为类?哟您应该始终更改DGV的数据源,而不是试图直接修改DGV。@新手如果您想要真正的类型更新,您需要一个可以通知属性更改的对象。
DataTable
可以,所以
BindingSource
bindingslist
都可以。您是这里最好的朋友,可能是链接到Bin的数据表顺便说一句,对于每个
var类型
,您确实不需要数据表,这就是数据行内容。您可以添加一列(到数据表中,隐藏在DGV中)如果需要,它可以充当标识符/索引器……我没有JSON,伙计。我已经说过几次了。这只是一个示例,源代码是一个
内部静态字典变量{get;set;}
,我不想直接修改DGV。我只想在我的字典更改时更新它。@Jimi:我仍然可以有多个选项卡页,每个选项卡页都有不同的
var类型
,只有一个数据表?
            DataTable dt = new DataTable();

            Dictionary<string, DataRow> dict1 = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("Name"), y => y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

            Dictionary<string, List<DataRow>> dict2 = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("Name"), y => y)
                .ToDictionary(x => x.Key, y => y.ToList());