我将值成员和显示成员从datareader设置为这样的组合框。
public void getPartyNamesCombo()
{
SqlDataReader reader = new VotingOP().getPartyNamesToCombo();
while (reader.Read())
{
cmbPartyName.Items.Add(new { PartyID = reader["partyID"].ToString(), PartyName = reader["partyName"].ToString() });
}
cmbPartyName.ValueMember = "PartyID";
cmbPartyName.DisplayMember = "PartyName";
}
我试图像这样访问id
int selectedValue = (int)cmbPartyName.SelectedValue;
MessageBox.Show("Selected value is"+selectedValue);
但它给了我"未处理的类型' System.NullReferenceException'"例外。我在这里做错了什么?
答案 0 :(得分:2)
我建议采用以下方法:
首先:为数据项创建一些类:
class MyDataItem
{
public string PartyID { get;set; }
public string PartyName { get;set; }
}
第二:你用它代替你的匿名对象:
public void getPartyNamesCombo()
{
SqlDataReader reader = new VotingOP().getPartyNamesToCombo();
while (reader.Read())
{
cmbPartyName.Items.Add(new MyDataItem() {
PartyID = reader["partyID"].ToString(),
PartyName = reader["partyName"].ToString()
});
}
cmbPartyName.ValueMember = "PartyID";
cmbPartyName.DisplayMember = "PartyName";
}
第三:最后,您现在可以将所选项目转换为自定义数据项并获取其属性:
MyDataItem selectedItem = cmbPartyName.SelectedItem as MyDataItem;
if (selectedItem != null)
{
MessageBox.Show(String.Format("You've just selected the '{0}' party with the ID {1}", selectedItem.PartyName, selectedItem.PartyID));
}
请注意,我使用SelecetedItem
为您提供整个对象,而SelectedValue
只提供PartyID
。
如果您以后改变主意并想要显示其他属性,那么它们就已经可用。
答案 1 :(得分:1)
如果当前没有选定值,则cmbPartyName.SelectedValue
将返回null。首先,您需要获取所选值并检查它是否为空:
object selectedValue = cmbPartyName.SelectedValue;
if (selectedValue != null)
{
// Now convert the selected value to integer.
int selectedPartyID = (int)selectedValue;
// And now you can handle the integer.
// ...
}
else
{
// There is no value selected...
}