WPF C#SelectedItem和SelectedValue与.tostring()方法

时间:2014-10-21 13:37:53

标签: c# wpf combobox

这是一个出于好奇的问题(它现在正常工作),我正在使用C#(WPF)和Access 2007编写程序,这就是程序的工作原理:

我有一个ComboBox(让它称之为CB1),其中包含从Access中的表中填充的项目列表,当用户从此ComboBox中选择一个项目时,另一个ComboBox(CB2)填充了与此选择相关的项目(取自另一个表格),当用户从CB1中选择一个项目时,我会比较这样的值:

foreach(DataRow row in dataTable.Rows)
{
    if(row["item1"] == CB1.SelectedValue)
    {
        CB2.Items.Add(row["item2"]);
    }
}

由于.SelectedValue属性,它无法正常工作(这样做只会在CB2列表中添加1个项目,有时它应该添加2个项目),但是如果我使用{{1} }做比较它工作正常(所有项目都添加到CB2),所以我想我的问题是......在比较时使用.SelectedValue.ToString() vs SelectedValue的区别是什么?价值观,提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

CB1.SelectedValue表示System.Object类型。 .ToString()属性将Object转换为类型字符串,该字符串可能与您从数据库中选择的内容相匹配。您之前尝试将对象与字符串进行比较,而不是比较两个字符串。

对象类描述为:

  

.NET Framework中所有类的最终基类;它是类型层次结构的根。

行为描述如下(根据MSDN):

  

将SelectedValue设置为值X会尝试选择其项目   值评估为X;如果找不到这样的项目,则选择是   清零。

有关SelectedValue的更多信息:

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedvalue(v=vs.110).aspx

有关Object class的更多信息:

http://msdn.microsoft.com/en-us/library/system.object(v=vs.110).aspx

答案 1 :(得分:0)

您要比较两个返回对象的两个值。

您最多只需要一次匹配,因为您正在比较对象引用(而不是基础值)。换句话说,当您使用代码获得匹配时,因为row["item1"]引用的对象与CB1.SelectedValue引用的对象相同。

if (row["item1"] == CB1.SelectedValue)

这些对象可以是字符串,数字,也可以是您创建的更复杂的类。


如果您知道他们是字符串,请将它们转换为字符串:

if (Convert.ToString(row["item1"]) == Convert.ToString(CB1.SelectedValue))

如果(例如)你知道它们是整数,你应该在比较之前将它们转换为整数:

if (Convert.ToInt32(row["item1"]) == Convert.ToInt32(CB1.SelectedValue))