C# 组合框SelectedValue返回一个对象而不是值

C# 组合框SelectedValue返回一个对象而不是值,c#,winforms,visual-studio-2008,combobox,windows-ce,C#,Winforms,Visual Studio 2008,Combobox,Windows Ce,目标:当我的表单加载时,我正在执行一个数据库调用,该调用将向我返回一个数据表,我希望将该数据表作为KeyValuePair(string,string)指定为组合框的数据源。显示成员是键(RailCarID),值成员是值(RailcarTransaction_Guid)(我将其存储为字符串) 我遇到的问题是,当我使用combobox.SelectedValue时,它会向我返回一个对象而不是字符串。有人能告诉我我做错了什么吗 我最初使用的是一个字典(它会出错),通过搜索来解决我的问题,最终使用的是

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

我遇到的问题是,当我使用combobox.SelectedValue时,它会向我返回一个对象而不是字符串。有人能告诉我我做错了什么吗

我最初使用的是一个字典(它会出错),通过搜索来解决我的问题,最终使用的是一个绑定列表。现在,我的应用程序上的组合框在显示屏上显示对象数组。下面是一些代码片段:

    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;
    }
private void GetAllTransactions()
{
BindingList事务=新建BindingList();
string sql=“从RailCartTransaction中选择*,其中IsComplete='True'和IsUpload='False';
DataTableTransactions=session1.GetRecords(sql);
对于(int i=0;i
由于可以设置为任何数据类型的属性(例如,它可以是
int
DateTime
,不一定是
字符串
),因此该属性是一个对象

您必须知道实际处理的类型,并将其转换回:

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

然后,我想问一下,在将数据绑定到组合框以便只显示RailCarID方面,我做错了什么,但GUID值仍然存在。因为有可能使用同一个RailCarID发生多个事务,所以它们必须在我的组合框中作为单独的项处理(因为每个事务都有一个唯一的事务guid)。请问您使用的是什么版本的visual studio?我的组合框显示的是什么-是{[Choocoo,b64e9b71-8543-4cb2-bf4e-c204743b9758]}-我仔细检查了一下…没有其他东西接触到源头。这里可能有一件事值得注意…我正在从事的项目是一个在windowsCE环境下运行的smartdevice项目。已确认-代码已命中。此外,当我点击表单上的“关闭”按钮时,我检查了该值以确保cboxRailCars.ValueMember为=“value”(与DisplayMember相同)。我也做了一个快速切换来查看,去掉了字典(根据同事的建议),只是尝试给他们分配数据表中列的名称……也忽略了它们的存在。非常奇怪…想知道它是否与WindowsCE环境有关…因为如果您确认这在普通winforms应用程序上有效…这是唯一剩下的变量。经过数小时的调整后…我解决了问题。首先……这个方法是代码中“on_change”事件的一部分……我在设置数据源时没有意识到它被触发了。正如你所说的,但我没有听你的,命令很重要。在设置数据源之前,我设置了值/显示成员…它工作得非常好。这就解释了为什么你的独立版本可以工作,而我的应用程序却不能。谢谢你今天花了这么多时间!