【问题标题】:How to cast selectedvalue of combobox to an integer?如何将组合框的选定值转换为整数?
【发布时间】:2013-11-13 21:00:30
【问题描述】:

我有一个由数据源(值和 id)填充的组合框

comboBox_Degree.DataSource = ds.Tables["Field"];`
comboBox_Degree.DisplayMember = "Field_Degree";
comboBox_Degree.ValueMember = "Field_ID";

现在我想在 SelectedIndexChanged 事件发生时检索 id。但是当我将它转换为 int 时,我遇到了这样的错误。

int fid = Convert.ToInt32(comboBox_Degree.SelectedValue.ToString());

错误:

输入字符串的格式不正确。

如何将此值转换为整数?

【问题讨论】:

  • comboBox_Degree.SelectedValue.ToString() 的确切值是多少?
  • 您可以编辑以包含所选项目的值吗?
  • 我推荐 TryParse 进行转换,这样您可以根据布尔值进行评估并更优雅地处理强制转换异常。
  • 什么意思?我认为它是 system.Data.DatarRowView 并且通常它会返回一些数字。
  • TryParse 执行与 Convert.ToInt32 相同的操作,但如果转换失败它不会抛出异常。但这仍然不会告诉我们为什么转换失败。你能不破坏你的代码并获取值comboBox_Degree.SelectedValue.ToString(),然后将其发布在此处以消除所有可能的歧义吗?

标签: c# winforms combobox


【解决方案1】:

您可以使用此代码来解决您的问题:

 int id = Convert.ToInt32(comboBox_Degree.SelectedValue.GetHashCode());

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我发现首先设置cbxExampleComboBox.DataSource 然后设置cbxExampleComboBox.ValueMembercbxExampleComboBox.DisplayMember 第二是调用cbxExampleComboBox.SelectedValue 时返回对象的原因。

    如果cbxExampleComboBox.SelectedValue 的类型是int,则设置cbxExampleComboBox.ValueMembercbxExampleComboBox.DisplayMember 然后cbxExampleComboBox.DataSource 将返回int

    如果Field_IDint 类型,则将代码更改为以下应返回int 的结果

    comboBox_Degree.ValueMember = "Field_ID";
    comboBox_Degree.DisplayMember = "Field_Degree";
    comboBox_Degree.DataSource = ds.Tables["Field"];
    

    【讨论】:

      【解决方案3】:

      我通常会做类似的事情

      int fid=0;
      try {
           fid=int.Parse(comboBox_Degree.SelectedValue.ToString());
          } catch (Exception e)
          {
           //Whatever you want to do when it is not an int
          }
      

      【讨论】:

      • 存在 TryParse 方法时为什么要使用 try-catch 块?查看 Avia 的回答
      • 偏好胜过一切。我通常想记录一个错误,我会把它放在 catch 中,但我想我可以获取 bool 并执行 if (!parseOK) 然后写我的日志。异常捕获的好处是您可以捕获 e.Message 或 e.StackTrace 并写入日志。有时很有帮助,但在解析整数时可能就没那么有用了。
      【解决方案4】:

      使用这个:

      int fid;
      bool parseOK = Int32.TryParse(comboBox_Degree.SelectedValue.ToString(), out fid);
      

      【讨论】:

        【解决方案5】:

        我遇到了类似的问题。但是,问题是由于组合框设置阶段触发了事件处理程序。因此,在组合框设置(DataSource、ValueMember 和 DisplayMember 分配)之后,我将 SelectedIndexChanged EventHandler 添加从 Form.Designer 添加到 FormLoad Event。

          // Example Combobox for Roles
          DataTable dtRoles = new DataTable();
          dtRoles = labDAO.GetRoles();
          cbxRoleID.DataSource = dtRoles;
          cbxRoleID.ValueMember = "ID";
          cbxRoleID.DisplayMember = "Name";
          cbxRoleID.SelectedIndexChanged += cbxRoleID_SelectedIndexChanged;
        

        【讨论】:

          猜你喜欢
          • 2018-04-23
          • 2017-02-05
          • 1970-01-01
          • 1970-01-01
          • 2014-06-28
          • 1970-01-01
          • 2020-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多