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

イベントを処理して、次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 に答える
1

これを使用する必要があるようですDataTemplatesAutoGeneratingColumnそこにロジックをフックして提供できます。また、クエリの実行後にすべての可能な車がロードされない可能性があるため、 Carsそれらを表示するために個別にロードする必要がある場合があります。そして、パターンを調べることを強くお勧めします。ComboBox
MVVM


これに役立つ可能性のある同様の質問がいくつかあります。

于 2012-06-27T11:45:05.070 に答える