【问题标题】:combobox selected value in c#c#中的组合框选定值
【发布时间】:2011-02-14 12:26:51
【问题描述】:

我正在开发 C#.net windows 应用程序。我正在使用以下方法在我的 winform 上填充组合框。

cmbEMPType.DataSource = objEntityManager.EmployeeTypes();
cmbEMPType.DisplayMember = "EMPTypeName";
cmbEMPType.ValueMember = "EMPTypeId";

objEntityManager.EmployeeTypes(); 在将列表从 Linq 获取到 sql server 的管理器方法中。这工作正常。

但是当我选择项目表单组合框并单击按钮然后在按钮单击事件中我得到cmbEMPType.SelectedValue 作为EmpType 返回类型而不是它的ID。为什么要这样?我不想再创建一个 EmpType 对象。需要简单的选定值。也不能对 SelectedIndex 保持信心。每次可能因项目而异。

**Edited**
      public List<EMPType> EmployeeTypes()
        {
            List<EMPType> EMPTypeList = null;
            try
            {
                if (CommonDataObject.dataContext.EMPAllTypes.Any())
                {
                    EMPTypeList = CommonDataObject.dataContext.EMPAllTypes.ToList();
                }
                return EMPTypeList;
            }
            catch
            {

                return EMPTypeList;
            }

        }

已编辑

   private void btnSave_Click(object sender, EventArgs e)
        {

iEMPTypeId = cmbEMPType.SelectedValue;
}

这里我必须了解一下。但要求创建 EMPType 对象。

【问题讨论】:

  • 您确定您没有使用 cmbEMPType.SelectedItem 吗?这通常会获取所选对象 (EmpType),而 cmbEMPType.SelectedValue 将获取“ValueMember”中指定的属性。
  • 是的,我确定。我检查了三次。但不幸的是有SelectedValue。事实上你也可以检查它的返回类型。它显示“对象”。
  • 它总是返回对象,因为值可以是任何类型,所以无论如何你都需要转换它。请按照我在其他评论中的要求发布更多代码,我们会看看发生了什么。
  • “要求创建 EMPType 对象”是什么意思?你有错误吗?如果是这样,请在此处发布完整的错误消息..

标签: c# winforms combobox selectedvalue


【解决方案1】:

这是正确且预期的行为,您无法更改。

SelectedValue 应该返回属性的类型,例如如果 EMPTypeId 是整数,它应该返回整数 - 请发布更多代码,以便我们可以尝试找出您得到不同返回值的原因。

如果您有任何机会使用SelectedItem,那么有这样的代码来获取 ID:

 int selectedID = (cmbEMPType.SelectedItem as EmpType).EMPTypeId;

处理没有选择的情况:

object oSelectedEmp = cmbEMPType.SelectedItem;
int selectedID = oSelectedEmp == null ? -1 : (oSelectedEmp as EmpType).EMPTypeId;

【讨论】:

  • 其实你错了。 SelectedValue 应该给出在 ValueMember 中指定的字段的值,而不是实际的对象。如果没有指定 ValueMember,它会给出一个 ToString() 表示。
  • @Rewinder:那么我该如何解决这个问题。 @Shadow Wizard:我认为这已经足够我提供的代码了。你期望什么?实际上,我想将 Selected Value 作为整数。但它给了我 EmpType 的对象类型。为什么要这样?
  • @Lal 发布objEntityManager.EmployeeTypes 方法的标题。发布您读取所选值的方式。
  • @Lal 不好.. 你打电话给EmployeeTypes,但发布了EMPTypes 的代码 - 请发布相关方法的代码以及您如何读取所选值,即您的按钮点击代码。
  • 哦,对不起我的错误。请立即查看
【解决方案2】:

问题在于您的代码顺序。请将第一行代码删除到最后一行。您将从cmbEMPType.SelectedValue 获得一个int 值(iEMPTypeId)。

cmbEMPType.DisplayMember = "EMPTypeName"; 
cmbEMPType.ValueMember = "EMPTypeId"; 
cmbEMPType.DataSource = objEntityManager.EmployeeTypes();

iEMPTypeId = cmbEMPType.SelectedValue

【讨论】:

    【解决方案3】:

    另一个选项是覆盖 EMPType 类中的 toString 函数。正如 Edwin de Koning 所说,“如果没有指定 ValueMember,它会给出一个 ToString() 表示。”

    类似的东西(我目前无法测试):

    public override string ToString()
    {
        return this.ID;
    }
    

    您可以查看这篇文章:http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多