组合框在c#中选择的值

时间:2011-02-14 12:26:52

标签: c# winforms combobox selectedvalue

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

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

其中objEntityManager.EmployeeTypes();在管理器方法中从Linq获取List到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;
}

这里我必须得到inte。但要求创建EMPType对象。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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

iEMPTypeId = cmbEMPType.SelectedValue

答案 2 :(得分:0)

另一个选项是覆盖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