2

我正在将数据读取器中的值成员和显示成员设置为这样的组合框。

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'类型的未处理异常”异常。我在这里做什么错了?

4

2 回答 2

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.

如果您稍后改变主意并想要显示其他属性,它们将已经可用。

于 2014-12-29T16:58:17.973 回答
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... 
}
于 2014-12-29T16:43:20.593 回答