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

WPF C#SelectedItem和SelectedValue与.tostring()方法,c#,wpf,combobox,C#,Wpf,Combobox,这是一个出于好奇的问题(现在工作正常),我正在使用C#(WPF)和Access 2007编写一个程序,程序的工作原理如下: 我有一个组合框(我们称之为CB1),其中包含从Access中的表填充的项目列表,当用户从该组合框中选择一个项目时,另一个组合框(CB2)将填充与该选择相关的项目(从另一个表中获取),问题是,当用户从CB1中选择一个项目时,我比较如下值: foreach(DataRow row in dataTable.Rows) { if(row["item1"] == CB1.S

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

我有一个组合框(我们称之为CB1),其中包含从Access中的表填充的项目列表,当用户从该组合框中选择一个项目时,另一个组合框(CB2)将填充与该选择相关的项目(从另一个表中获取),问题是,当用户从CB1中选择一个项目时,我比较如下值:

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

由于
.SelectedValue
属性的原因,它不能正常工作(这样做只会在CB2列表中添加1项,而有时它会添加2项),但是如果我使用
.SelectedValue.ToString()
进行比较,它工作正常(所有项都添加到CB2),因此我想我的问题是。。。在比较值时使用
SelectedValue
SelectedValue.ToString()
有什么区别??,提前感谢您的帮助

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

对象类描述为:

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

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

将SelectedValue设置为X值将尝试选择其 值计算为X;如果找不到此类项目,则选择为 清除

有关SelectedValue的更多信息:

有关对象类的详细信息:


比较两个返回对象的两个值

您最多只能期望一个匹配,因为您正在比较对象引用(而不是底层值)。换句话说,当您使用代码获得匹配时,这是因为
行[“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))

谢谢你的回答!,但是,我仍然不清楚为什么第一次(添加第一项时)它工作正常,但它忽略了其他项=(