我有一个简单的Windows窗体应用程序(带有Access数据库),其中包含一个以最简单的方式填充的组合框(cmbStores)。
问题:我无法获取所选项目的值。
以下是我填充此组合框的方法:
// 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);
答案 0 :(得分:4)
如果为组合框设置了SelectedValue
,请尝试使用ValueMember
,否则默认为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.
}
答案 1 :(得分:4)
我知道我有点晚了,但效果很好:
int? nStoreNumber = cmbABSM.SelectedValue as int?;
if (nStoreNumber==null)
return;
答案 2 :(得分:2)
确实
Int32.Parse(box.SelectedItem.ToString());
为你工作?
答案 3 :(得分:1)
您可以使用SelectedItem.Value或SelectedValue,实际差异在于没有选择时返回的内容。
SelectedItem.Value返回值,如果没有选定项,则返回null。
SelectedValue也会返回该值,但如果没有选定项
,则返回空字符串进一步阅读:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selecteditem.aspx
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue.aspx