0

我有 2 张桌子:

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列表。

抱歉,如果有人问这个问题,这是我第一次尝试 C# 和 WPF,不知道要搜索什么关键字!

4

2 回答 2

1

似乎您需要为此使用DataTemplates。您可以挂钩AutoGeneratingColumn并在那里提供您的逻辑。此外,您可能必须单独加载Cars以显示它们,ComboBox因为在执行查询后可能不会加载所有可能的汽车。
我强烈建议看看MVVM模式。


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

于 2012-06-27T11:45:05.070 回答
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:使用 DataGridComboBoxColumn CTP

于 2012-06-27T11:56:56.137 回答