获取ComboBox中所选项的ID

4

我有一个ComboBox,里面的选项是从我的数据库中获取的。我试图获取在ComboBox中被选中的项的ID,但是我尝试的所有方法似乎都无效。

int id = cbbilar.SelectedIndex + 1;

这是我当前的代码,非常低效,并且如果数据库中的第一个项目被删除,则停止工作。
var cars = (from z in db.Bilar 
            select new { Value = z.Id, Names = z.Marke.Namn + " "  + z.Namn }).ToList();
cbbilar.DataSource = cars;
cbbilar.DisplayMember = "Names";
cbbilar.ValueMember = "Value";
cbbilar.SelectedIndex = 0;

这是我的“Combobox”代码。我要如何使它获取“SelectedItem”的“ID”?
5个回答

3

您需要使用SelectedValueint.TryParse方法。代码如下:

int id;
bool result = int.TryParse(cbbilar.SelectedValue.ToString(), out id);

你不能直接将SelectedValue强制转换为int类型吗?因为它被传入作为int类型。 - Ian of Oz
@IanofOz 的 SelectedValue 是一个对象类型。 - Salah Akbari
这似乎已经解决了!非常感谢!为什么我不可以简单地写成 int id = int.Parse(cbbilar.SelectedValue.ToString()); 而必须要以这种方式来编写呢? - Matt J
@MattJ 点击此处了解有关 int.TryParse 的更多信息 https://msdn.microsoft.com/zh-cn/library/f02979c7(v=vs.110).aspx 我在我的答案中也包含了 MSDN 的链接。 - Salah Akbari
@S.Akbari 是的,但是由于 SelectedValue 对象保存了一个 int 值,所以你应该能够将其强制转换为 int。我刚刚双重检查了一下——创建一个新对象,将其赋值为 int 值,然后你就可以将其强制转换为 int。显然这取决于你最初传递的是 int 值。Matt,如果你想尝试的话,就自己决定吧。 - Ian of Oz
在解析(Parse)和尝试解析(TryParse)方面,所有TryParse给你的是更好的错误处理(即在数据不良情况下提供的false返回值,而不是异常)。但如果数据是好的,它们是一样的。因此,您的转换代码可能发生在任何选项之前,这种情况有可能发生吗? - Ian of Oz

1
这是我完成的内容:

comboBoxPickupLoc.DataSource = pickupLocationRepo.GetPickupLocations();
comboBoxPickupLoc.DisplayMember = "LocationName";
comboBoxPickupLoc.ValueMember = "Id";
comboBoxPickupLoc.SelectedIndex = -1;

然后你可以获取如下所示的Id值。

  object value = comboBoxPickupLoc.SelectedValue;
  MessageBox.Show(value.ToString());

感谢。

0
每当我获取SelectedIndex的值时,都是为了将id放入另一个DataBase以实现各种目的。我已经使用TryParse完成了这个任务,但是以下代码行是将其作为字符串提取而不是解析为int的最简单方法。
string id = combobox.SelectedValue.ToString();

0

获取在WPF ComboBox中选择的项目的ID

Country和State是您的模型类。

代码 =>

Country country_selected = (Country)DDCountry.SelectedValue;  
State state_selected = (State)DDState.SelectedValue;  
int country_id = country_selected.country_id;
int state_id = state_selected.state_id;      

0

我知道这是一个老问题,但这里有另一种从数据库中获取信息并加载到comboBox的方法。

   private void userControl_Load(object sender, EventArgs e)
   {
      scon.Open(); //--DB Connection
      string query = "SELECT * FROM AssetTypes"; //Query

      SqlDataReader row;
      SqlCommand scmd = new SqlCommand(query,scon);
      row = scmd.ExecuteReader();

      if (row.HasRows)
      {
         while (row.Read())
         {
            AssetTypeComboBox.Items.Add(row["AssetTypesName"].ToString());
         }
      }
      scon.Close();
   }

获取ID:

int itemID = AssetTypeComboBox.SelectedIndex + 1; //returns the ID number in the DB. provided the ;list was not sorted.

对我来说非常有效,也许它可以帮助其他人,如果他们在未来遇到困难并且不太理解。


这并没有回答问题。他们知道如何填充下拉框。问题是如何从中获取对象的ID值。你甚至没有提到这一点,更不用说展示如何完成了。 - Gert Arnold
@GertArnold,你好,非常抱歉,你说得对。我会编辑并修正它,以返回数据库中的实际ID。 - FloydNotSoGeeky
SelectedIndex不是对象的ID值。这个答案站不住脚。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接