C# 中组合框选定的值

发布于 2024-10-17 05:21:03 字数 1224 浏览 7 评论 0 原文

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

I am working on C#.net windows application. i am filling combobox on my winform by using follows.

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

where objEntityManager.EmployeeTypes(); in the manager method that gets the List from Linq to sql server. this is working fine.

but as i select the item form combo box, and clicked the button then in the button click event i am getting cmbEMPType.SelectedValue as EmpType return type rather than its Id. why should this? I don't want to create one more EmpType object. need simple selected value. also can not keep faith with SelectedIndex. it may varies for item each time.

**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;
            }

        }

Edited

   private void btnSave_Click(object sender, EventArgs e)
        {

iEMPTypeId = cmbEMPType.SelectedValue;
}

here I must get inte. but asking of create the EMPType object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青衫负雪 2024-10-24 05:21:03

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

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

如果您有机会使用 SelectedItem ,则使用此类代码来获取 ID:

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

处理未选择任何内容的情况:

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

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:

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

To handle cases when there's nothing selected:

object oSelectedEmp = cmbEMPType.SelectedItem;
int selectedID = oSelectedEmp == null ? -1 : (oSelectedEmp as EmpType).EMPTypeId;
最近可好 2024-10-24 05:21:03

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

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

iEMPTypeId = cmbEMPType.SelectedValue

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) from cmbEMPType.SelectedValue.

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

iEMPTypeId = cmbEMPType.SelectedValue
呆橘 2024-10-24 05:21:03

另一种选择是重写 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

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):

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

You can check out this article: http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文