无法从数据读取器读取值成员设置到组合框

时间:2014-12-29 16:38:33

标签: c# winforms combobox valuemember

我将值成员和显示成员从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'"例外。我在这里做错了什么?

2 个答案:

答案 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... 
}