【问题标题】:How to set the selected value of a combobox to a string value如何将组合框的选定值设置为字符串值
【发布时间】:2016-01-04 14:01:46
【问题描述】:

我花了一段时间寻找答案,但到目前为止我还没有找到任何对我有用的东西。我有一个将组合框的内容保存到数据库的系统。当我从数据库中取回内容时,我试图将组合框的选定项目设置为从数据库返回的项目。例如: XAML:

<ComboBox SelectedValuePath="Content" x:Name="cmbMyCmb" SelectedIndex="0" SelectionChanged="cmbMyCmb_SelectionChanged">
      <ComboBoxItem Content="Please Select"/>
      <ComboBoxItem Content="Item 1"/>
      <ComboBoxItem Content="Item 2"/>
      <ComboBoxItem Content="Item 3"/>
</ComboBox>

代码背后:

cmbMyCmb.SelectedValue = itemFromDatabase;

如果我显示itemFromDatabase,它会显示“Item 2”并且它是一个字符串。

我在表单上有一个输入表单和一个数据网格。当从数据网格中选择一个项目时,我希望这些项目显示在输入表单中,以便可以编辑和更新它们。我有所有其他项目显示我只需要这个组合框将所选值设置为数据库中的字符串。

【问题讨论】:

  • 你是否试图从它所包含的类之外设置它?如果它的值是私有的,那么您将必须创建一个属性方法来设置该值。如果您使用的是 Visual Studio,请查看组合框控件的属性,看看是否设置为私有。
  • @LarryLane 我正在尝试从后面的代码中设置它。我有这个:((ComboBoxItem)cmbMyCmb.SelectedItem).Content = itemFromDatabase;但这只是更改“请选择”的文本,而不是选择字符串等于的文本。
  • SelectedItem.Content = X,将内容设置为X,但不改变选中项。你能改成SelectedIndex吗?

标签: c# wpf xaml combobox datagrid


【解决方案1】:

去掉组合定义中的SelectedIndex="0",试试这个:

 <ComboBox x:Name="cmbMyCmb" SelectedValuePath="Content" SelectionChanged="cmbMyCmb_SelectionChanged" Margin="99,104,117.4,157.8">
        <ComboBoxItem Content="Please Select"/>
        <ComboBoxItem Content="Item 1"/>
        <ComboBoxItem Content="Item 2"/>
        <ComboBoxItem Content="Item 3"/>
    </ComboBox>

后面的代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        //get item from database here
        string itemFromDatabase = "Item 2";

        cmbMyCmb.SelectedValue = itemFromDatabase;
    }

请注意,我在 Loaded 事件中将其作为有关如何更改的示例。如果你在SelectionChanged 事件中这样做,结果是无论用户选择什么,你后面的代码都会把它放回你想要的任何值,这是没有意义的。

【讨论】:

  • 抱歉造成混淆,后面的代码位于将数据网格值设置为组合框值的按钮内,该代码不在 SelectionChanged 事件内。话虽如此,您的解决方案有效,所以谢谢!
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2011-10-05
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多