WPF C#SelectedItem和SelectedValue与.tostring()方法
本文关键字:方法 tostring C#SelectedItem SelectedValue WPF | 更新日期: 2023-09-27 18:27:22
这是一个出于好奇的问题(现在运行良好),我正在使用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()
有什么区别??,提前感谢您的帮助!
您正在比较的两个值都返回对象。
您最多期望一个匹配,因为您比较的是对象引用(而不是底层值)。换句话说,当您使用代码获得匹配时,这是因为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