我的组合框有以下自定义类,我正在尝试以编程方式按值选择项目。我可以使用转换按值检索项目,但似乎无法按值选择项目。
string test2 = ((GetAcctNum)_comboBox.SelectedItem).Value;
// 转换可以按值检索项目,但是如何按值选择项目?
public class GetAcctNum
{
public string Value { get; set; }
public string Text { get; set; }
public override string ToString()
{
return Text;
}
}
我无法使用下面的解决方案,因为我不知道文本。我只会知道需要在组合框中选择的隐藏值。
_comboBox.SelectedValue = _comboBox.Items.FindByText("text").Value;
下面是我如何将值添加到组合框
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
temp = new GetAcctNum();
temp.Value = reader["AccountID"].ToString();
temp.Text = reader["AccountNumber"].ToString();
getAcctNum.Add(temp);
rowsAffected++;
}
}
//Omitted for brevity//
foreach (GetAcctNum item in getAcctNum)
{
_comboBox.Items.Add(item);
}
getAcctNum
将帐号列表分配给
ComboBox
时,指定要向用户显示哪个属性,以及将哪个属性用作选择的基础值。
List<GetAcctNum> accountNumbers = GetAccountNumbersFromWherever();
_comboBox.DataSource = accountNumbers;
_comboBox.DisplayMember = "Text";
_comboBox.ValueMember = "Value";
然后您可以通过指定帐户列表中的值之一来设置
SelectedValue
。
_comboBox.SelectedValue = "SomeValueFromYourListOfAccounts";
使用此类和方法按值选择项目。
public class ComboboxItem
{
public string Text { get; set; }
public object Value { get; set; }
public ComboboxItem(string text, string value)
{
Text = text;
Value = value;
}
public override string ToString()
{
return Text;
}
}
private void SelectCmbItemByValue( ComboBox cbo, string value)
{
for (int i = 0; i < cbo.Items.Count; i++)
{
ComboboxItem ci = (ComboboxItem)cbo.Items[i];
string _value = ci.Value.ToString();
if (ci != null && _value == value)
{
cbo.SelectedIndex = i;
break;
}
}
}
将 ComboBox.Item 投射到
KeyValuePair<int, string>
:
private void SetCurrentValueOfComboBox(ComboBox oBox, string sItemValue)
{
for (int i = 0; i < oBox.Items.Count; i++)
{
//Cast to KVP
KeyValuePair<int, string> oItem = (KeyValuePair<int,string>)oBox.Items[i];
if (oItem.Value == sItemValue)
{
oBox.SelectedItem = oBox.Items[i];
break;
}
}
}