Есть DataGrid, в нём две колонки DataGridComboBoxColumn. В первой колонке страны, во второй города. Есть таблица соответствия городов странам. Выбрали в первой колонке Россию, как сделать так, чтобы при клике на комбобокс в ячейке второй колонки показывались только города России?
Здравствуйте, zvb733, Вы писали:
Z>Есть DataGrid, в нём две колонки DataGridComboBoxColumn. В первой колонке страны, во второй города. Есть таблица соответствия городов странам. Выбрали в первой колонке Россию, как сделать так, чтобы при клике на комбобокс в ячейке второй колонки показывались только города России?
Вот примерчик кода
<DataGrid ItemsSource="{Binding Countries}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=name}" Width="50"/>
<DataGridComboBoxColumn
SelectedValueBinding="{Binding Path=CurrentCity}"
SelectedValuePath="id"
DisplayMemberPath="name">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding country_cities}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding country_cities}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
country_cities — это связь между таблицами в DataSet
Теоретически нет разницы между теорией и практикой, но на практике она есть
Здравствуйте, seimur, Вы писали:
S>Здравствуйте, zvb733, Вы писали:
Z>>Есть DataGrid, в нём две колонки DataGridComboBoxColumn. В первой колонке страны, во второй города. Есть таблица соответствия городов странам. Выбрали в первой колонке Россию, как сделать так, чтобы при клике на комбобокс в ячейке второй колонки показывались только города России?
S>Вот примерчик кода
S>S><DataGrid ItemsSource="{Binding Countries}" AutoGenerateColumns="False">
S> <DataGrid.Columns>
S> <DataGridTextColumn Binding="{Binding Path=name}" Width="50"/>
S> <DataGridComboBoxColumn
S> SelectedValueBinding="{Binding Path=CurrentCity}"
S> SelectedValuePath="id"
S> DisplayMemberPath="name">
S> <DataGridComboBoxColumn.ElementStyle>
S> <Style TargetType="{x:Type ComboBox}">
S> <Setter Property="ItemsSource" Value="{Binding country_cities}"/>
S> </Style>
S> </DataGridComboBoxColumn.ElementStyle>
S> <DataGridComboBoxColumn.EditingElementStyle>
S> <Style TargetType="{x:Type ComboBox}">
S> <Setter Property="ItemsSource" Value="{Binding country_cities}" />
S> </Style>
S> </DataGridComboBoxColumn.EditingElementStyle>
S> </DataGridComboBoxColumn>
S> </DataGrid.Columns>
S> </DataGrid>
S>
S>country_cities — это связь между таблицами в DataSet
здесь неплохо это описано.
Теоретически нет разницы между теорией и практикой, но на практике она есть
Здравствуйте, seimur, Вы писали:
S>здесь неплохо это описано.
Большое спасибо, попробую. Пока сделал по другому — через DataGridTemplateColumn:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding City}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding City}" ItemsSource="{Binding Cities}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Идея отсюда:
How to get cell level ComboBox for WPF DataGrid?
Извратновато конечно