Search code examples
c#wpfxamldatagridcomboboxcolumn

Is there a way to populate a DataGridComboBoxColumn in a DataGrid from a DataTable?


I think the question I'm asking is similar to How to populate a DataGridComboBoxColumn? but mine is from a DataTable instead of a class. I've created a dataset to use as an example. But basically, the column is blank when I load it, but when I select an item from the combo box, it still edits the datatable as expected, but I think I'm missing something to bind the data to the column.

        DataTable dt;
        public MainWindow()
        {
            InitializeComponent();
            CreateDT();
        }

        public void CreateDT()
        {
            dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Position", typeof(string));
            // List for the options in the comboBox
            List<string> list = new List<string>()
            {
                "Position 1",
                "Position 2",
                "Position 3",
                "Position 4",
                "Position 5"
            };
            // datatable
            for (int i = 0; i < 10; i++)
            {
                dt.Rows.Add("Person A", "Position A");
            }
            ComboBoxColumn.ItemsSource = list;
            RestoreTable.ItemsSource = dt.DefaultView;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // Adding a break point here so I can debug what the datatable looks like after selecting a value
        } 

With the XAML for it

    <Grid>
        <DataGrid Name="RestoreTable" AutoGenerateColumns="False" HorizontalAlignment="Center" VerticalAlignment="Top" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                <DataGridComboBoxColumn x:Name="ComboBoxColumn" 
                                        Header="Position" 
                                        SelectedItemBinding="{Binding List}" 
                                        SelectedValueBinding="{Binding Position}"
                                        ???????/>
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Button" HorizontalAlignment="Left" Margin="703,352,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
    </Grid>

Solution

  • Issue was because the value in the DataTable wasn't in the DataGridComboBoxColumn list, so it wasn't showing, either adding "Position A" to the list or changing "Position A" to "Position 1" solves this issue.