【问题标题】:WPF C# SelectedItem and SelectedValue with .tostring() methodWPF C# SelectedItem 和 SelectedValue 与 .tostring() 方法
【发布时间】:2014-10-21 22:00:24
【问题描述】:

这是一个出于好奇而提出的问题(现在运行良好),我正在使用 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 项),但是如果我使用 .SelectedValue.ToString() 进行比较它工作正常(所有项目都添加到 CB2),所以我想我的问题是......比较值时使用 SelectedValue 与 SelectedValue.ToString() 有什么区别??提前感谢您的帮助!

【问题讨论】:

    标签: c# wpf combobox


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 感谢您的回答 AugPopa!,但是我仍然不清楚为什么它第一次工作正常(添加第一个项目时)但它忽略了其他项目 =(
      猜你喜欢
      • 2012-06-23
      • 2021-10-15
      • 2011-02-22
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2011-06-21
      • 2011-04-17
      相关资源
      最近更新 更多