2

我正在开发 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 对象。

4

3 回答 3

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;
于 2011-02-14T12:38:51.590 回答
1

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

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

iEMPTypeId = cmbEMPType.SelectedValue
于 2011-07-08T13:02:28.713 回答
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

于 2011-07-08T16:18:41.893 回答