C# WPF XAML 绑定(bind)到 DataTable

标签 c# wpf data-binding xaml datatable

我有以下表格:

公司 {CompanyID, CompanyName}
交易 {CompanyID, Value}

我有一个列表框:

<ListBox Name="Deals"
         Height="100" Width="420" Margin="0,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"
         Visibility="Visible" IsSynchronizedWithCurrentItem="True"
         ItemsSource="{Binding}" SelectionChanged="Deals_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold"  />
                <TextBlock Text=" -> TGS -> " />
                <TextBlock Text="{Binding BuyFrom}" FontWeight="Bold" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

如您所见,我想显示 CompanyName 而不是作为外键的 ID。关系“companyRowByBuyFromCompanyFK”存在,因为在 Deals_SelectionChanged 中,我可以访问 Deals 行的 companyRowByBuyFromCompanyFK 属性,我也可以访问该行的 CompanyName 属性。

这不起作用的原因是因为 XAML 绑定(bind)使用 [] 索引器吗?而不是我的 DataTable 中 CompanyRows 的属性?

目前我得到的值如下

  • -> TGS -> 3
  • -> TGS -> 4

编辑绑定(bind)错误更新

System.Windows.Data Error: 39 : BindingExpression path error: 'companyRowByBuyFromCompanyFK' property not found on 'object' ''DataRowView' (HashCode=30295189)'. BindingExpression:Path=companyRowByBuyFromCompanyFK.CompanyName; DataItem='DataRowView' (HashCode=30295189); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

看起来它没有将 DataRowView 项目转换为 SuppliersRow

实现此目标的最佳方法是什么?

  1. 使用作为自定义参数引用的表制作一个转换器来转换外键。

  2. 为每个表创建 TableView ?这会很冗长,因为我有大量具有外键的表。

最佳答案

有人杀了我....感谢您指出输出窗口我总是忘记这一点! :(

我通过查看下面的输出窗口找到了解决方案

System.Windows.Data Error: 39 : BindingExpression path error: 'companyRowByBuyFromCompanyFK' property not found on 'object' ''DataRowView

我发现 DataTemplate 绑定(bind)绑定(bind)到 DataTemplate 的 SelectedItem,它是一个 DataRowView 而不是实际的强类型数据。幸运的是,DataRowView 类有一个指向 DataRow(即 supplierRow)类的 Row 属性,因此我可以像往常一样从那里进行绑定(bind)。修复在以下行中。

<TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold"  />

按照我的预期将其更改为以下内容。

<TextBlock Text="{Binding Row.companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold"  />

关于C# WPF XAML 绑定(bind)到 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598961/

相关文章:

c# - 查找两个多边形之间的最短距离(SqlGeography c#)

c# - 是否有人使用 C#、Delphi 或 FreePascal 实现了 PRESENT 超轻量级 block 密码加密?

.net - 使 WrapPanel 尊重他 parent 的宽度

c# - 在工具提示 WPF 上使用 Storyboard

java - 具有不同 getters setter 的未知子类型的通用配置

javascript - 如何在 Angular2 中创建多个控件并将其绑定(bind)到一个字段对象?

java - 带有 BindingAdapter 的 MutableLiveData 不更新 View 的可见性

c# - 有没有办法判断一个参数是否有这个修饰符?

c# - 如何最多启用一次菜单项?

c# - 绑定(bind)标签和文本框(XAML)时的区别