C# 如何使组合框显示字典列表并根据所选值进行操作?

C# 如何使组合框显示字典列表并根据所选值进行操作?,c#,winforms,dictionary,serialization,combobox,C#,Winforms,Dictionary,Serialization,Combobox,C#/Winforms程序。 我有以下课程,其中包含我的字典: public class DictionaryInit { public Dictionary<int, DictionaryCheckup> C = new Dictionary<int, DictionaryCheckup>() { {1000, new DictionaryCheckup {theGrouping="C"}},

C#/Winforms程序。

我有以下课程,其中包含我的字典:

    public class DictionaryInit
    {
        public Dictionary<int, DictionaryCheckup> C = new Dictionary<int, DictionaryCheckup>()
        {
            {1000, new DictionaryCheckup {theGrouping="C"}},
            {100, new DictionaryCheckup {theGrouping="C"}},
        };
    }
公共类字典
{
公共字典C=新字典()
{
{1000,新字典checkup{theGrouping=“C”},
{100,新字典checkup{theGrouping=“C”},
};
}
其中DictionaryCheckup是一个获取;套;一个字符串

在这个类中,我有从C到T的字母,我想在一个组合框中显示它们的值。这就是我尝试过的:

        var theDictionaries = new DictionaryInit();
        List<Dictionary<int, DictionaryCheckup>> Dictionaries = new List<Dictionary<int, DictionaryCheckup>> { theDictionaries.C, etc }; 
        cmbDictionList.DataSource = new BindingSource(Dictionaries, null);
var thedictionary=newdictionaryinit();
列表字典=新列表{thedictionary.C等};
cmbDictionList.DataSource=新的BindingSource(字典,null);
运行此命令会在框中填充[Collection]

过程和预期结果:

其思想是,用户首先从组合框中选择一个字典(C-T),然后将值保存到变量中。然后,我将使用以下代码:

            OFD.ShowDialog();
            var theDict = new DictionaryInit();
            if (OFD.FileName != null)
            {
                using (var stream = new StreamReader(File.OpenRead(OFD.FileName)))
                {
                    // Read our JSON from the file
                    var json = stream.ReadToEnd();
                    theDict.E = JsonConvert.DeserializeObject<Dictionary<int, DictionaryCheckup>>(json);
                    var files = new Dictionary<string, Dictionary<int, DictionaryCheckup>>();
                } 
            }
OFD.ShowDialog();
var theDict=newdictionaryinit();
如果(OFD.FileName!=null)
{
使用(var stream=newstreamreader(File.OpenRead(OFD.FileName)))
{
//从文件中读取我们的JSON
var json=stream.ReadToEnd();
theDict.E=JsonConvert.DeserializeObject(json);
var files=newdictionary();
} 
}
正如您在我当前的流程中所看到的,我明确声明了ICT.E。我希望能够用前面从组合框中选择的变量替换它,以便选择序列化/反序列化哪个字典

  • 我希望能够以某种方式使用DictionaryInit类作为组合框的数据源

  • 选择的值将决定我将在稍后的方法中序列化的字典


  • 如果DictionaryInit.C中的所有DictionaryCheckkup都有相同的字母,我会这样做:

  • 将字母属性添加到它
  • 将组合框绑定到列表
  • 设置组合框的DisplayMember=“Letter”
  • 代码:

    公共类字典
    {
    公共字符串字母{get;private set;}
    公共字典yinit(字符串字母)
    {
    这个字母=字母;
    C=新字典()
    {
    {1000,新字典checkup{theGrouping=letter},
    {100,新字典checkup{theGrouping=letter},
    };
    }
    公共字典C{get;私有集;}
    } 
    var list=新列表();
    AddRange(new[]{new DictionaryInit(“C”)、new DictionaryInit(“D”)});
    cmbDictionList.DataSource=列表;
    cmbDictionList.DisplayMember=“信函”;
    
    如果我尝试序列化,它的用途是什么?我只是拉“字母”吗?您需要任何属性来显示在Combo中。您甚至可以从dictionary
    public string Letter{get{return C.First().Value.theGrouping;}}
    I设法让您的组合框填充方法起作用,但是,我仍然不知道如何根据从组合框中选择的字母设置序列化。theDict.E=JsonConvert.DeserializeObject(json);所以,我想知道如何用找到的值替换dict.E。这是一本字典。我从组合框中检索到的字母是字符串,因此存在类型不匹配。您给出的示例显式地输入了C,而它应该只是引用所选的值。如果您将
    cmbDictionList.DataSource
    设置为
    List
    cmbDictionList.DisplayMember=“Letter”
    cmbDictionList强。选择editem
    cmbDictionList。选择的值将是
    DictionaryInit
    。字母C很容易混淆,因为这里C是来自分组的字母,而不是来自类
    字典的属性
    
        public class DictionaryInit
        {
            public string Letter { get; private set; }
    
            public DictionaryInit(string letter)
            {
                this.Letter = letter;
                C = new Dictionary<int, DictionaryCheckup>()
                {
                    {1000, new DictionaryCheckup {theGrouping=letter}},
                    {100, new DictionaryCheckup {theGrouping=letter}},
                };
            }
            public Dictionary<int, DictionaryCheckup> C { get; private set; }
        } 
    
    var list = new List<DictionaryInit>();
    list.AddRange(new[]{new DictionaryInit("C"), new DictionaryInit("D")});
    cmbDictionList.DataSource = list;
    cmbDictionList.DisplayMember = "Letter";