如何通过我的数据源的键或值更改我当前选择的项目?
How can I change my current selected item by either the key or value of my datasource?
我有一个 Dictionary<uint, string>
和一个 ComboBox
使用样式 DropDownList
,我在其中绑定了这本字典,例如:
comboBox1.DataSource = new BindingSource(myDic, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
现在我希望能够通过单击按钮 select 我字典中的任意项,因此给定绑定的字典项:
Dictionary<uint, string> myDic = new Dictionary<uint, string>()
{
{ 270, "Name1" },
{ 1037, "Name2" },
{ 1515, "Name3" },
};
我试过:
comboBox1.SelectedItem = myDic[270];
comboBox1.SelectedText = myDic[270];
comboBox1.SelectedValue = myDic[270];
comboBox1.SelectedItem = 270;
comboBox1.SelectedValue = 270;
但是上面的 none 更改了 selected 项目。
如何通过数据源的键或值更改当前 selected 项目?
这已经足够了。不确定在非常大的列表上的性能,但您可能也不想要一个巨大的 ComboBox 列表。
foreach (var item in myDic)
comboBox1.Items.Add(item.Value); // Populate the ComboBox by manually adding instead of binding
comboBox1.SelectedIndex = comboBox1.Items.IndexOf(myDic[1037]);
此代码的明显问题是取消了数据源绑定,这可能适合您,也可能不适合您。也许其他人会提供更好的答案。
你可以用我发现的一点扩展方法来做 here
只需将其放入扩展程序中即可 class。
public static KeyValuePair<TKey, TValue> GetEntry<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key)
{
return new KeyValuePair<TKey, TValue>(key, dictionary[key]);
}
然后你可以像这样设置你的项目
comboBox1.SelectedItem = myDic.GetEntry<uint,string>(1515);
这个问题的关键是您必须设置 KeyValuePair(而不仅仅是 uint 或字符串 value/key)。
希望对您有所帮助!
昨天找的时候正好查询到驱动DataSource,转成BindingSource发现有一个属性"Current"决定KeyPar是从link内部选择的.因此,将值更改为 test 和 Bingo !
Dictionary<int,string> diccionario=new Dictionary<int,string>();
diccionario.Add(1,"Bella");
diccionario.Add(2,"Bestia");
this.comboList.DisplayMember = "Value";
this.comboList.ValueMember = "Key";
this.comboList.DataSource = new BindingSource(diccionario, null);
((BindingSource)this.comboList.DataSource).Position=0; // select init
///////Method's change ///////
((BindingSource)this.comboList.DataSource).Position =Convert.ToInt32(value);
我有一个 Dictionary<uint, string>
和一个 ComboBox
使用样式 DropDownList
,我在其中绑定了这本字典,例如:
comboBox1.DataSource = new BindingSource(myDic, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
现在我希望能够通过单击按钮 select 我字典中的任意项,因此给定绑定的字典项:
Dictionary<uint, string> myDic = new Dictionary<uint, string>()
{
{ 270, "Name1" },
{ 1037, "Name2" },
{ 1515, "Name3" },
};
我试过:
comboBox1.SelectedItem = myDic[270];
comboBox1.SelectedText = myDic[270];
comboBox1.SelectedValue = myDic[270];
comboBox1.SelectedItem = 270;
comboBox1.SelectedValue = 270;
但是上面的 none 更改了 selected 项目。
如何通过数据源的键或值更改当前 selected 项目?
这已经足够了。不确定在非常大的列表上的性能,但您可能也不想要一个巨大的 ComboBox 列表。
foreach (var item in myDic)
comboBox1.Items.Add(item.Value); // Populate the ComboBox by manually adding instead of binding
comboBox1.SelectedIndex = comboBox1.Items.IndexOf(myDic[1037]);
此代码的明显问题是取消了数据源绑定,这可能适合您,也可能不适合您。也许其他人会提供更好的答案。
你可以用我发现的一点扩展方法来做 here
只需将其放入扩展程序中即可 class。
public static KeyValuePair<TKey, TValue> GetEntry<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key)
{
return new KeyValuePair<TKey, TValue>(key, dictionary[key]);
}
然后你可以像这样设置你的项目
comboBox1.SelectedItem = myDic.GetEntry<uint,string>(1515);
这个问题的关键是您必须设置 KeyValuePair(而不仅仅是 uint 或字符串 value/key)。
希望对您有所帮助!
昨天找的时候正好查询到驱动DataSource,转成BindingSource发现有一个属性"Current"决定KeyPar是从link内部选择的.因此,将值更改为 test 和 Bingo !
Dictionary<int,string> diccionario=new Dictionary<int,string>();
diccionario.Add(1,"Bella");
diccionario.Add(2,"Bestia");
this.comboList.DisplayMember = "Value";
this.comboList.ValueMember = "Key";
this.comboList.DataSource = new BindingSource(diccionario, null);
((BindingSource)this.comboList.DataSource).Position=0; // select init
///////Method's change ///////
((BindingSource)this.comboList.DataSource).Position =Convert.ToInt32(value);