如何保存对WPF数据网格的更改,显示数据形式2连接表?

时间:2012-06-27 11:10:31

标签: c# .net wpf wpfdatagrid datagridcomboboxcolumn

我有两张桌子:

Person:
    p_id  
    p_name  
    c_id  
Car:  
    c_id  
    c_name  

这是我的XAML标签:

<DataGrid Name="dataGrid1" 
          ItemsSource="{Binding Path=myPath}" 
          AutoGenerateColumns="True" />

这是C#:

a = new SqlDataAdapter("SELECT p.p_name AS Person, c.c_name AS Car FROM Person AS p, Car AS c WHERE p.c_id = c.c_id", c);
d = new DataSet();
a.Fill(d, "myPath");
dataGrid.DataContext = d;

当然我可以查看,但我无法编辑数据。我希望通过一些“魔术”我可以将Car-TextColumn转换为ComboBox,并使用Car表中的Item列表。

很抱歉,如果有人问这个问题,这是我第一次尝试使用C#和WPF,不确定要搜索哪些关键字!

2 个答案:

答案 0 :(得分:1)

好像你需要使用DataTemplates。你可以挂钩AutoGeneratingColumn并提供你的逻辑。此外,您可能必须分开加载Cars以在ComboBox中显示它们,因为在执行查询后可能无法加载所有可能的汽车。
我强烈建议您查看MVVM模式。


有几个类似的问题可能对您有所帮助:

答案 1 :(得分:1)

您可以处理AutoGeneratingColumn事件并添加DataGridComboBoxColumn这样的内容 -

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
  if (e.PropertyName == "CustomerID")
  {
    DataGridComboBoxColumn column = new DataGridComboBoxColumn();

    column.DataFieldBinding = new Binding("CustomerID");

    column.DataFieldTarget = ComboBoxDataFieldTarget.SelectedValue;

    column.ItemsSource = DBAccess.GetCustomers().Tables["Customers"].DefaultView;

    column.EditingElementStyle = (Style)this.RootGrid.FindResource("CustomerFKStyle");

    e.Column = column;
  }
}

请参阅此文章了解详情和示例 - WPF DataGrid: Working with DataGridComboBoxColumn CTP