Как сохранить изменения в сетке данных WPF, показывающей данные из двух объединенных таблиц?

У меня 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, не знаю, по каким ключевым словам искать!


person nvcnvn    schedule 27.06.2012    source источник


Ответы (2)


Похоже, для этого нужно использовать DataTemplates. Вы можете перехватить AutoGeneratingColumn и предоставить там свою логику. Также вам может потребоваться загрузить Cars отдельно, чтобы отобразить их в ComboBox, потому что после выполнения вашего запроса могут быть загружены не все возможные автомобили.
И я настоятельно рекомендую взглянуть на шаблон MVVM.


Есть пара похожих вопросов, которые могут вам в этом помочь:

person Anatolii Gabuza    schedule 27.06.2012

Вы можете обработать событие 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

person akjoshi    schedule 27.06.2012