C# 如何使组合框显示字典列表并根据所选值进行操作?
C#/Winforms程序。 我有以下课程,其中包含我的字典: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"}},
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.C中的所有DictionaryCheckkup都有相同的字母,我会这样做:
公共类字典
{
公共字符串字母{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中。您甚至可以从dictionarypublic 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";