【发布时间】:2013-10-09 20:57:58
【问题描述】:
我正在开发一个与 Access 2000 数据库对话的简单 WPF 应用程序。我过去使用过实体框架,但似乎我受限于 Access 数据库。我设法生成了一个 DataSet xsd 文件,其中包含每个表的映射以及表之间的关系。架构如下图:
为了将数据绑定到 WPF 数据网格,在从各种表适配器填充数据后,我将 DataContext 设置为 DataSet。我在后面的 WPF 代码中使用以下 C# 来实现这一点:
public partial class MainWindow : Window
{
private TillDataSet ds = new TillDataSet();
private TransactionTableAdapter transactionDa = new TransactionTableAdapter();
private DentistTableAdapter dentistDa = new DentistTableAdapter();
private Transaction_TypeTableAdapter transactionTypeDa = new Transaction_TypeTableAdapter();
private Payment_MethodTableAdapter paymentMethodDa = new Payment_MethodTableAdapter();
public MainWindow()
{
InitializeComponent();
}
private void fillDataAdapters()
{
transactionDa.Fill(ds.Transaction);
dentistDa.Fill(ds.Dentist);
transactionTypeDa.Fill(ds.Transaction_Type);
paymentMethodDa.Fill(ds.Payment_Method);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
fillDataAdapters();
this.DataContext = ds;
}
}
我想显示一个 WPF 数据网格,其中包含来自事务表的详细信息。我能够从事务表中检索基本详细信息。我想要实现的是能够导航表具有的关系,这样我就可以显示牙医名称,而不是外键值。我尝试了以下 XAML:
<!--Transaction List-->
<DataGrid Grid.Row="1" Grid.Column="1" Name="dtgTransactions" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" ItemsSource="{Binding Transaction}">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Trans_Date}" />
<DataGridTextColumn Header="Type" Binding="{Binding Type}" />
<DataGridTextColumn Header="Dentist" Binding="{Binding Dentist.Dentist_Name}"/>
<DataGridTextColumn Header="Payment Method" Binding="{Binding Method}" />
</DataGrid.Columns>
</DataGrid>
请注意牙医列下的绑定。当我尝试这个时,我得到一个空的数据列。如何使用 XAML 导航关系?
【问题讨论】:
-
我没有任何查询,数据直接来自DataContext。 MS Access 交互是通过 OLEDB 进行的,它没有实体框架提供程序。否则我可以形成 LINQ 查询并包含导航属性。我确实在寻找某种加载选项设置,但没有走多远。
-
尝试添加数据集关系,可能是这样的: ds.Relations.Add("TransactionsDentists", ds.Tables["Transaction"].Columns["DentistID"], ds.Tables["牙医"].Columns["牙医ID"])
-
感谢您的建议。我尝试添加关系,但有一个例外,即孩子和父母之间已经存在关系。这至少表明关系已经到位。我确实发现我可以在后面的代码中导航关系。我可以执行以下操作: MessageBox.Show(ds.Transaction.First().DentistRow.Dentist_Name);如果我尝试从 XAML 导航 DentistRow 属性,它仍然会失败......
-
是否有绑定错误,进入Debug -> Windows -> Output
标签: c# wpf xaml ms-access datagrid