【发布时间】:2011-09-28 18:27:49
【问题描述】:
我对 WPF 完全陌生,并试图用 DataGrid 制作一个简单的应用程序。此应用程序从 WebService 接收员工数据集,并且必须允许查看和编辑数据。 DataSet 包含三个表:Employees (id, Name, GenderId, PositionId)、Genders (id, Name) 和 Positions (Id, Name)。员工表通过 GenderId 与 Genders 连接,并通过 PositionId 与 Positions 连接。 我已经将员工数据集拖到窗口并获得了允许编辑项目的数据网格。但现在它包含位置和性别的 ID,我需要组合框,它允许从可用值中选择性别或位置并将它们保存回数据集。 我通过以下方式加载数据集:
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"];
}
但是,就我而言,这不是一个好习惯。而且我仍然没有得到想要的结果。我认为可能有一种简单的方法来完成这样的任务。
【问题讨论】:
标签: c# .net wpf datagrid datatable