我正在使用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对象。
答案 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