私はWPFを初めて使い、DataGridで簡単なアプリケーションを作成しようとしています。このアプリケーションは、WebServiceからEmployees DataSetを受け取り、データの表示と編集を許可する必要があります。 DataSetには、従業員(ID、名前、GenderId、PositionId)、性別(ID、名前)、および位置(ID、名前)の3つのテーブルがあります。 GenderId経由でGenderと、PositionIdを介してPositionsと接続しているEmployeesテーブル。 私はEmployees DataSetをウィンドウにドラッグし、項目を編集できるDataGridを取得しました。しかし、これにはPositionとGenderのIDが含まれています。利用可能な値からGenderまたはPositionを選択してDataSetに保存できるようにするComboBoxesが必要です。 私は次のようにDataSetを読み込む:WPF Datagrid with comboboxesとDataSetからのロード
EmployeesProxy.EmployeesServiceClient proxy = new EmployeesProxy.EmployeesServiceClient();
proxy.ClientCredentials.UserName.UserName = "user1";
proxy.ClientCredentials.UserName.Password = "pass1";
empDataSet = proxy.GetEmployeesData();
employeesDataGrid.ItemsSource = empDataSet.Employees.DefaultView;
GenderDT = empDataSet.Gender;
proxy.Close();
私は私の窓のプロパティとしてempDataSetとGenderDTを持っています。 しかし、データを編集できるコンボボックスでXAMLに列を作成できませんでした。これを行う方法はありますか?
編集:私は(私が編集モードで性別を選択することができますが、通常モードで性別の名前を表示することができない、私はIDのみを参照してください)、部分的に動作します。この解決策を見つけた:
<DataGridTemplateColumn Header="Gender">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=GenderDT,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}"
DisplayMemberPath="Name"
SelectedValuePath="Gender" SelectionChanged="ComboBox_SelectionChanged" Loaded="ComboBox_Loaded"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=GenderId}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
コンボボックスを変更した後、私は変更性別の列:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
((DataRowView)employeesDataGrid.SelectedItem).Row["GenderId"] = ((DataRowView)((ComboBox)sender).SelectedItem).Row["Id"];
}
しかし、私にとっては、これは良いことではありません。そして、私はまだ望みの結果を得ていません。私はそのような仕事をする簡単な方法があると思った。私は同じ問題を抱えているし、解決策を見つけた
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox >
....
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
ええ、私はこのようなことをしていますが、私はそれを働かせることができません:(。私のコードを見て、私は質問を更新しました – MyUserName