使用绑定DataTable的WPF ComboBox

时间:2014-10-11 00:13:35

标签: c# wpf combobox ado.net

我是WPF的新手,我真的很沮丧。我有一个绑定到DataTable的组合框。 DataTable填充了一个存储过程,该过程返回4个项目:ID,名称,日期,联系人。我希望组合框通过使用Name填充下拉列表并关联ID来工作,这样当用户选择一个项目时,我可以用另一个需要ID作为where子句中的参数的存储过程来填充数据网格。

这是组合框的XAML:

<ComboBox x:Name="cbTransmittals" HorizontalAlignment="Left" Margin="0,250,0,0"    VerticalAlignment="Top" Width="500" 
          SelectedValue ="{Binding TransID, Mode=TwoWay}"
          SelectedValuePath ="TransID" 
          DisplayMemberPath="TransName"
          ItemsSource="{Binding Source={StaticResource transmittalsViewSource}}"
          SelectionChanged="cbTransmittals_SelectionChanged"/>

在Window_Loaded方法中,VS为我设置了ViewSource的数据绑定。我已将设置SelectedIndex的行放在我的SelectionChanged例程的测试中,并查看它是否按预期工作。有时相应地设置所选项目,但现在不是。我试图获取文本或相应的ID无济于事。大多数情况下,当我尝试获取SelectedValue时,由于类型不匹配而抛出异常(转换为int不起作用,而且SelectedValuePath为我提供了一个来自上面的XAML参数的字符串......无用)。

以下是Window_Loaded的初始化代码:

        DocControlMain.dsDocControlTableAdapters.TransmittalsTableAdapter dsDocControlTransmittalsTableAdapter = 
            new DocControlMain.dsDocControlTableAdapters.TransmittalsTableAdapter();
        dsDocControlTransmittalsTableAdapter.Fill(dsDocControl.Transmittals);
        System.Windows.Data.CollectionViewSource transmittalsViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("transmittalsViewSource")));
        transmittalsViewSource.View.MoveCurrentToFirst();
        cbTransmittals.SelectedIndex = 5;

如何使用cbTransmittals.SelectedItem,SelectedValue或其他内容来检索ID?我感觉它没有被正确绑定,因为我让VS通过将DataSource元素拖到设计器页面中的ComboBox来生成代码。我一直在谷歌搜索,但仍然没有正常工作的代码,但我可以很快地在Windows窗体应用程序中使用此功能。

感谢任何帮助,保罗

2 个答案:

答案 0 :(得分:0)

换句话说,您需要从Selected Item获取combobox。您只需创建一个ComboBoxItem的对象,然后从中获取内容或值。

可以提供帮助:

Get selected value from combo box in c# wpf

Get wpf combobox selected value

答案 1 :(得分:0)

好的,我终于完成了所有工作。我误用了XAML,并且通过对其进行屠宰,记录的正确方法来检索值不起作用。对于任何有类似问题的人,在XAML for combo或list box中,&#34; DisplayMemberPath&#34;应设置为具有要在列表中显示的内容的列名,以及&#34; SelectedValuePath&#34;应设置为具有您想要关联的值的列名称。 ComboBox.SelectedValue将返回SelectedValuePath列中的类型。 。 。也就是说,当您将其设置为int类型表中的列时,SelectedValue将为int。同样,如果它是一个字符串。在我的情况下,我没有设置它,因此返回是组合框绑定(DataRowView)的通用数据类型,因为它绑定到DataTable。

在上面的代码中,我的错误是脑死亡:我将selectedvalue路径设置为&#34; TransID&#34;这是另一个表中的外键,应该设置为&#34; UID&#34;。