繁体   English   中英

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

[英]WPF C# SelectedItem and SelectedValue with .tostring() method

出于好奇,这是一个问题(现在可以正常工作),我正在使用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属性,它不能正常工作(用这种方法只能将1个项目添加到CB2列表中,有时它应该添加2个项目),但是如果我使用.SelectedValue.ToString()进行比较,它就可以工作很好(所有项目都添加到CB2中),所以我想我的问题是...比较值时使用SelectedValueSelectedValue.ToString()什么区别??,谢谢您的帮助!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM