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



这是一个出于好奇的问题(现在运行良好),我正在使用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),所以我想我的问题是……在比较值时,使用SelectedValueSelectedValue.ToString()有什么区别??,提前感谢您的帮助!

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

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

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

更多关于对象类的信息:

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

最新更新