2017-01-08 7 views
0

У меня вопрос. У меня есть вкладка с пустой datagrid. Когда программа запускается, datagrid заполняется данными из базы данных. Вы можете отредактировать его, а затем сохранить его, нажав кнопку «Opslaan» (голландский для сохранения). Проблема заключается в том, что на вкладке «Bestellingen» есть 1 поле под названием State, причем состояния «Delivered», «Sent», «Processing». Поэтому я хотел бы, чтобы это конкретное поле было как combobox, так как теперь пользователь должен вводить одно из состояний, и если пользователь делает ошибку ввода, он получает ошибку, с помощью combobox пользовательский интерфейс будет расширен. Может ли кто-нибудь объяснить мне, как и если я смогу это сделать?Комбобокс в DataGrid, который сначала пуст (загрузка содержимого из базы данных)

<Window x:Class="SFES.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:SFES" 
    mc:Ignorable="d" 
    Title="Super Fontys Entertainment System" Height="396.563" Width="711.25" WindowState="Maximized"> 
<Grid> 
    <TabControl x:Name="tabControl" Margin="0,0,0.4,-0.2"> 
     <TabItem Header="Klanten"> 
      <Grid Background="#FFE5E5E5"> 
       <DataGrid x:Name="KlantenDataGrid" ItemsSource="{Binding }" Margin="0,19,0.4,0.4"/> 
       <Button x:Name="KlantenOpslaan" Content="Opslaan" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="KlantenOpslaan_Click"/> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Bestellingen"> 
      <Grid Background="#FFE5E5E5"> 
       <DataGrid x:Name="BestellingenDataGrid" ItemsSource="{Binding }" Margin="0,19,0.4,0.4"/> 
       <Button x:Name="OpslaanBestellingen" Content="Opslaan" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="OpslaanBestellingen_Click"/> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Spelers"> 
      <Grid Background="#FFE5E5E5"> 
       <DataGrid x:Name="SpelersDataGrid" ItemsSource="{Binding }" Margin="0,19,0.4,0.4"/> 
       <Button x:Name="SpelersOpslaan" Content="Opslaan" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="SpelersOpslaan_Click"/> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Leveranciers"> 
      <Grid Background="#FFE5E5E5"> 
       <DataGrid x:Name="LeveranciersDataGrid" ItemsSource="{Binding }" Margin="0,19,0.4,0.4"/> 
       <Button x:Name="LeveranciersOpslaan" Content="Opslaan" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="LeveranciersOpslaan_Click"/> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Highscores"> 
      <Grid Background="#FFE5E5E5"> 
       <DataGrid x:Name="HighscoresDataGrid" ItemsSource="{Binding }" Margin="0,19,0.4,0.4"/> 
       <Button x:Name="HighscoresOpslaan" Content="Opslaan" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="HighscoresOpslaan_Click"/> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Spellen"> 
      <Grid Background="#FFE5E5E5"> 
       <DataGrid x:Name="SpellenDataGrid" ItemsSource="{Binding }" Margin="0,19,0.4,0.4"/> 
       <Button x:Name="OpslaanSpellen" Content="Opslaan" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" RenderTransformOrigin="0.504,0.541" Click="OpslaanSpellen_Click"/> 
      </Grid> 
     </TabItem> 
    </TabControl> 

</Grid> 

public DataTable VulTabellen(string Commando) 
    { 
     MyConnection.Open(); 
     MySqlCommand Command = new MySqlCommand(Commando, MyConnection); 
     DataTable DT = new DataTable(); 
     MySqlDataAdapter Reader = new MySqlDataAdapter(Command); 
     Reader.Fill(DT); 
     MyConnection.Close(); 
     return DT; 
    } 
+0

http://stackoverflow.com/a/30666133/4664754 –

ответ

0

В вас XAML, вам необходимо объявить столбец типа выпадающий так:

<DataGridComboBoxColumn Header="State" SelectedItemBinding="{Binding States}"> 
    <DataGrid.Columns> 
    <DataGridComboBoxColumn.ElementStyle> 
     <Style TargetType="ComboBox"> 
      <Setter Property="ItemsSource" Value="{Binding States}"/> 
      <Setter Property="IsReadOnly" Value="True"/> 
     </Style> 
    </DataGridComboBoxColumn.ElementStyle> 
</DataGridComboBoxColumn> 

Затем вам нужно установить DataContext что-то другое чем DataTable. Например:

public class GridData 
{ 
    public DataTable Table { get; set; } 

    // for the combobox see the property name. This is also in XAML above 
    public List<string> States {get; set; } 
} 

Когда вы прочитали данные от datareader, вам необходимо создать класс выше.