【问题标题】:WPF, Linq to SQL, C# > How to Populate and Save A ComboboxWPF、Linq to SQL、C# > 如何填充和保存组合框
【发布时间】:2010-03-24 17:48:13
【问题描述】:

拔掉我的头发。我有一个表“Belts”,其中包含“BeltID”和“BeltColor”列。我有一个 Linq to SQL 生成的类,并试图填充一个组合框,它只是部分工作。到目前为止,这是我所得到的:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    using (DojoDataClassesDataContext conn = new DojoDataClassesDataContext())
    {
        var belts = (from b in conn.Belts
                    select b);

        cboBelt.DisplayMemberPath = "BeltColor";
        cboBelt.SelectedValuePath = "BeltID";
        cboBelt.ItemsSource = belts;
    }
}

还有 xaml:

<ComboBox Margin="101,0,57,97" Name="cboBelt" DisplayMemberPath="{Binding Path = Belt.BeltColor}" SelectedValuePath="{Binding Path = Belt.BeltID}" Height="23" VerticalAlignment="Bottom" />

当然,在 DojoDataClassesDataContext 中有整个自动生成的 Linq to SQL 内容,我曾经在没有任何问题的情况下进行文本框数据绑定(好吧,除了需要一段时间才能弄清楚之外)。目前,组合框会拉出文本:TheNameOfMyProject.Belt 作为所有下拉选项,但一旦选择它就会根据顺序显示正确的腰带颜色。

【问题讨论】:

  • 执行此代码时,您在“输出”窗口中看到了什么?是否有任何绑定失败消息?
  • @Robert:没有绑定失败。 @Anthony:在查询末尾添加 .ToList() 会导致查询在组合框中打印出来。奇怪,我知道。换显示器不行。 @Jake:即将尝试您的解决方案。
  • No dice Jake,我在 xaml 中遇到命名空间类型错误,但我无法弄清楚。我希望有一种方法可以修改我的查询和/或 xaml 代码以使其正常工作,因为我的项目的其余部分无论如何都是以类似的风格编码的。如果我很迟钝,请告诉我。我还在学习。
  • 你想想,我什至不需要做任何绑定。如果我可以用代码填充组合框,那么我可以根据文本框的值使用 LINQ 填充数据库。

标签: c# wpf linq linq-to-sql combobox


【解决方案1】:

假设这个函数:

public IEnumerable<Belt> GetBelts()
{
 return /* the belts you want */;
}

把它放在你的 Window.Resources 中:

        <ObjectDataProvider x:Key="BeltObject"
                        MethodName="GetBelts"                                   
                        ObjectType="{x:Type database:Belts}">
        </ObjectDataProvider>

与:

<ComboBox Margin="101,0,57,97" Name="cboBelt" DisplayMemberPath="BeltColor" SelectedValuePath="BeltID" Height="23" VerticalAlignment="Bottom" ItemsSource="{Binding Source={StaticResource BeltObject}}"/>

这是使用 WPF 最简洁的方法。您可能会遇到问题,因为您的 DisplayMemberPathSelectedValuePath 不正确 - 这些应该是表示属性名称的字符串值,而不是与特定属性值的绑定。

【讨论】:

    【解决方案2】:

    几件事:

    查看您的 linq to sql 我不是肯定的,但我认为您从未真正调用查询尝试将 .ToList 添加到查询的末尾。

    尝试将显示更改为:

    DisplayMemberPath="{绑定路径 = BeltColor}"

    SelectedValuePath="{绑定路径 = BeltID}"

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多