这是一个出于好奇的问题(它现在正常工作),我正在使用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
的区别是什么?价值观,提前感谢您的帮助!
答案 0 :(得分:0)
CB1.SelectedValue表示System.Object类型。 .ToString()属性将Object转换为类型字符串,该字符串可能与您从数据库中选择的内容相匹配。您之前尝试将对象与字符串进行比较,而不是比较两个字符串。
对象类描述为:
.NET Framework中所有类的最终基类;它是类型层次结构的根。
行为描述如下(根据MSDN):
将SelectedValue设置为值X会尝试选择其项目 值评估为X;如果找不到这样的项目,则选择是 清零。
有关SelectedValue的更多信息:
有关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))