【问题标题】:ComboBox SelectedValue Returning an Object And Not The ValueComboBox SelectedValue 返回一个对象而不是值
【发布时间】:2014-11-11 16:55:03
【问题描述】:

目标: 当我的表单加载时,我正在执行一个数据库调用,它返回给我一个我想作为 KeyValuePair(string,string) 作为数据源分配给组合框的 DataTable .显示成员是键(RailCarID),值成员是值(RailcarTransaction_Guid)(我将其存储为字符串)。

我遇到的问题是,当我执行 combobox.SelectedValue...它返回给我的是一个对象而不是一个字符串。谁能建议我在这里做错了什么?

我最初使用的是字典(它会出错),通过搜索解决我的问题最终使用了 BindingList。现在我的应用程序上的组合框在显示器中显示对象数组。下面是一些代码sn-ps:

    private void GetAllTransactions()
    {
        BindingList<KeyValuePair<string, string>> Transactions = new BindingList<KeyValuePair<string, string>>();
        string sql = "SELECT * FROM RailcarTransaction WHERE IsComplete = 'True' AND IsUploaded = 'False'";
        DataTable transactions = session1.GetRecords(sql);
        for (int i = 0; i < transactions.Rows.Count; i++)
        {
            Transactions.Add(new KeyValuePair<string, string>(transactions.Rows[i]["RailCarID"].ToString(), transactions.Rows[i]["RailcarTransaction_Guid"].ToString()));
        }       
        cboxRailCars.DisplayMember = "Key";
        cboxRailCars.ValueMember = "Value";
        cboxRailCars.DataSource = Transactions;
    }

【问题讨论】:

    标签: c# winforms visual-studio-2008 combobox windows-ce


    【解决方案1】:

    由于ComboBox.ValueMember 可以设置为任何 数据类型的属性(例如,它可以是intDateTime,不一定是string),@987654322 @property 是一个对象。

    你必须知道你实际处理的是什么类型并将其转换回来:

    var selectedRailCar = Convert.ToString(cboxRailCars.SelectedValue);
    

    【讨论】:

    • 那么我可以问一下我在将数据绑定到组合框以便只显示 RailCarID 方面做错了什么 - 但 GUID 值仍然存在。因为有可能使用相同的 RailCarID 发生多个事务,所以它们必须在我的组合框中被视为单独的项目(因为每个事务都有一个唯一的事务 guid)
    • 请问你用的是什么版本的visual studio?
    • 我的组合框显示的内容 - 是 {[CHOOCHOO, b64e9b71-8543-4cb2-bf4e-c204743b9758]} - 我仔细检查了......没有其他东西触及源。这里可能有一点值得注意……我正在做的项目是一个在 windowsCE 环境下运行的智能设备项目。
    • 确认 - 代码被命中。还确认,当我点击表单上的关闭按钮时,我检查了值以确保 cboxRailCars.ValueMember 为 =“Value”(与 DisplayMember 相同)。我也做了一个快速切换来查看,摆脱了字典(根据同事的建议),只是试图为它们分配 DataTable 中列的名称......也忽略了它们的存在。很奇怪...想知道它是否与 WindowsCE 环境有关...因为如果您确认这适用于普通的 winforms 应用程序...这是唯一剩下的变量。
    • 经过数小时的调整...我发现了问题所在。首先......这个方法是代码中“on_change”事件的一部分......当我设置数据源时我没有意识到它被触发了。正如你所说,但我没有听,顺序确实很重要。我在设置数据源之前设置了值/显示成员......它工作得很好。这就解释了为什么您的独立版本有效 - 而我在应用程序中没有。感谢您今天的所有时间!
    猜你喜欢
    • 2019-03-20
    • 2013-12-29
    • 1970-01-01
    • 2011-11-13
    • 2021-01-11
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多