Я абсолютно новичок в WPF и пытаюсь создать простое приложение с помощью DataGrid. Это приложение получает набор данных сотрудников от WebService и должно разрешать просмотр и редактирование данных. DataSet содержит три таблицы: Сотрудники (id, Name, GenderId, PositionId), Genders (id, Name) и Positions (Id, Name). Таблица сотрудников, связанная с полами через GenderId и с позициями через PositionId.
Я перетащил набор данных сотрудников в окно и получил DataGrid, который позволяет редактировать элементы. Но теперь он содержит идентификаторы Position и Gender, и мне нужны ComboBox, которые позволят выбрать Gender или Position из доступных значений и сохранить их обратно в DataSet.
Я загружаю 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>
После изменения ComboBox я меняю столбец Gender:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
((DataRowView)employeesDataGrid.SelectedItem).Row["GenderId"] = ((DataRowView)((ComboBox)sender).SelectedItem).Row["Id"];
}
Но, как по мне, это не очень хорошая практика. И я до сих пор не получаю желаемого результата. Я думал, что может быть простой способ сделать такую задачу.