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());