WPF ComboBox несколько столбцов из базы данных
Я хочу отобразить три столбца в ComboBox.
Вот мое решение, но, к сожалению, оно не работает.
У меня есть метод, который запускается при запуске программы, который выглядит следующим образом:
SqlDataAdapter da = new SqlDataAdapter("Select neve, kialakitas,befogado_kepesseg from helyszin", c1);
DataSet ds = new DataSet();
da.Fill(ds, "hely");
cbHelyszin.ItemsSource = ds.Tables["hely"].DefaultView;
cbHelyszin.DisplayMemberPath = ds.Tables["hely"].Columns["neve"].ToString();
cbHelyszin.DisplayMemberPath = ds.Tables["hely"].Columns["kialakitas"].ToString();
cbHelyszin.DisplayMemberPath = ds.Tables["hely"].Columns["befogado_kepesseg"].ToString();
cbHelyszin.SelectedValuePath = ds.Tables["hely"].Columns["neve"].ToString();
XAML
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid x:Name="gd" TextElement.Foreground="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Margin="5" Grid.Column="0" Text="{Binding }"/>
<TextBlock Margin="5" Grid.Column="1" Text="{Binding }"/>
<TextBlock Margin="5" Grid.Column="2" Text="{Binding }"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ComboBoxItem.IsSelected" Value="True">
<Setter TargetName="gd" Property="Background" Value="Gray"></Setter>
<Setter TargetName="gd" Property="TextElement.Foreground" Value="White"></Setter>
</Trigger>
<Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
<Setter TargetName="gd" Property="Background" Value="Blue"></Setter>
<Setter TargetName="gd" Property="TextElement.Foreground" Value="White"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
Как я могу сделать эту информацию подходящей для моего ComboBox?
1 ответ
Решение
Ты можешь использовать ItemTemplate
вместо того, чтобы пытаться установить DisplayMemberPath три раза. Например:
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding neve}" />
<TextBlock Grid.Column="1" Text="{Binding kialakitas}" />
<TextBlock Grid.Column="2" Text="{Binding befogado_kepesseg}" />
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>