C# 中组合框选定的值
我正在开发 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;
}
在这里我必须了解。但要求创建 EMPType 对象。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是正确且预期的行为,您无法更改它。SelectedValue
应返回属性的类型,例如,如果 EMPTypeId 是整数,则应返回整数 - 请发布更多代码,以便我们可以尝试找出为什么会得到不同的返回值。如果您有机会使用
SelectedItem
,则使用此类代码来获取 ID:处理未选择任何内容的情况:
This is the correct and expected behavior, you can't change it.SelectedValue
should return the type of the property, e.g. if EMPTypeId is integer it should return integer - please post more code so that we can try figuring out why you get different return value.If by any chance you're using
SelectedItem
then have such code to get the ID:To handle cases when there's nothing selected:
问题是你的代码的顺序。请将第一行代码删除到最后一行。您将从
cmbEMPType.SelectedValue
获得一个 int 值 (iEMPTypeId
)。The problem is the sequence of your code. Please remove the first line code to the last line. You will get an int value (
iEMPTypeId
) fromcmbEMPType.SelectedValue
.另一种选择是重写 EMPType 类中的 toString 函数。正如 Edwin de Koning 所说,“如果没有指定 ValueMember,它将给出 ToString() 表示形式。”
像这样的东西(我现在无法测试它):
您可以查看这篇文章:http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx
Another option is to override the toString function in your EMPType class. As Edwin de Koning stated "If no ValueMember is specified it gives a ToString() representation."
Something like (I cant test it at the moment):
You can check out this article: http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx