C#-在Windows窗体应用程序中获取SelectedItem的值

C#-在Windows窗体应用程序中获取SelectedItem的值,c#,combobox,selecteditem,C#,Combobox,Selecteditem,我有一个简单的Windows窗体应用程序(带有Access数据库)和一个组合框(cmbStores),它以想象得到的最简单的方式填充 问题:我无法获取所选项目的值 int nStoreNumber = Convert.ToInt32(cmbABSM.SelectedItem); 下面是我填充此组合框的方式: // Variable declaration string strQueryStores = "SELECT StoreNumber FROM tblStoresAndR

我有一个简单的Windows窗体应用程序(带有Access数据库)和一个组合框(cmbStores),它以想象得到的最简单的方式填充

问题:我无法获取所选项目的值

int nStoreNumber = Convert.ToInt32(cmbABSM.SelectedItem);
下面是我填充此组合框的方式:

// Variable declaration
        string strQueryStores = "SELECT StoreNumber FROM tblStoresAndRegion ORDER BY StoreNumber";
        string strConnectionString = UtilityClass.GetConnectionString();
        OleDbConnection connStores;
        OleDbDataReader readerStores = null;

        connStores = new OleDbConnection(strConnectionString);

        try
        {
            connStores.Open();
            OleDbCommand sqlGetStores = new OleDbCommand(strQueryStores, connStores);

            cmbStore.Items.Clear();
            cmbStore.Items.Add("All");
            if (connStores != null)
            {
                readerStores = sqlGetStores.ExecuteReader();

                if (readerStores.HasRows)
                {
                    while (readerStores.Read())
                    {
                        cmbStore.Items.Add (Convert.ToInt32(readerStores["StoreNumber"]));
                    }
                }
            }
            cmbStore.SelectedIndex = 0;

        }

        catch (OleDbException oledblEX)
        {
            MessageBox.Show(oledblEX.Message);
        }

        finally
        {
            if (readerStores != null)
                readerStores.Close();
            if (connStores != null)
                connStores.Close();
        }
这就是我试图获取所选项目值的方式

int nStoreNumber = Convert.ToInt32(cmbABSM.SelectedItem);

如果为组合框设置了
ValueMember
,请尝试使用
SelectedValue
,否则默认为
Text
属性:

//If ValueMember is set
int nStoreNumber = Convert.ToInt32(cmbABSM.SelectedValue);

//Otherwise
int nStoreNumber = Convert.ToInt32(cmbABSM.Text);
无论哪种方式,我都建议您确保所选内容的值是有效的
int

int nStoreNumber;

if (!int.TryParse(cmbABSM.SelectedValue, out nStoreNumber))
{
    //This is not a valid number.  Notify the user.
}


是否为您工作?

您可以使用SelectedItem.Value或SelectedValue,实际区别在于没有选择时返回的内容

Value返回值,如果没有选择项,则返回null

SelectedValue也会返回该值,但如果没有选定项,则会返回空字符串

进一步阅读:


我知道我有点晚了,但这很有效:

int? nStoreNumber = cmbABSM.SelectedValue as int?;
if (nStoreNumber==null)
    return;

用于获取所选项目的代码在哪里?你有例外吗?值不正确?当您尝试获取所选项目时发生了什么?您的代码中出现了一些不一致。填写cmdStore框,然后尝试读取cmbABSM框。这是真的吗,还是你打错了?@Matzi。。。我打错了。代码应为int-nStoreNumber=Convert.ToInt32(cmbStore.SelectedItem);已解决(但仍然困惑)。。。使用此代码时,int nStoreNumber=Convert.ToInt32(cmbStore.Text);它可以工作。您应该在项目上真正使用
文本
属性。读取器不清楚由
ToString
返回的内容。