У меня есть следующий элемент управления DataGrid, который потенциально должен показывать:

Флажок (для выбора), Поле со списком (для выбора действия), Столбец 1 (из базы данных), Столбец 2 (из базы данных)

<DataGrid x:Name="dgDatabase" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="299" Width="819">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn x:Name="dgIsTested" />
        <DataGridComboBoxColumn x:Name="dgProposedDataType" />
    </DataGrid.Columns>
</DataGrid>

Функция загрузки окна (как только приложение WPF открывается и загружается)

 private void OnLoaded(object sender, RoutedEventArgs e)
        {
            //Connect to SQL Database
            connObj = new SqlConnection(connection);
            cmdObj = new SqlCommand("SELECT DISTINCT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS", connObj);
            daAdapObj = new SqlDataAdapter(cmdObj);
            daAdapObj.Fill(dsObj, "Table");
            String[] myArray = { "Generic", "Number", "Date" }; 

            dgDatabase.ItemsSource = dsObj.Tables["Table"].DefaultView;
            dgProposedDataType.ItemsSource = myArray;
            }

Теперь я столкнулся с двумя проблемами:

  1. Поле со списком кажется пустым, когда я дважды щелкаю его, оно появляется в сетке, а затем я делаю свой выбор. Но как только я перехожу к следующему элементу сетки, выбор становится пустым.
  2. Могу ли я изменить порядок связанных и несвязанных столбцов: Checkbox, Column1, Column2, Combobox?

Любая помощь приветствуется

0
tempidope 1 Мар 2018 в 18:33

1 ответ

Лучший ответ

Вы можете упорядочить столбцы в любом порядке, установив для свойства AutoGenerateColumns значение false и определив столбцы в том порядке, в котором они должны отображаться:

<DataGrid x:Name="dgDatabase" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="299" Width="819"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn x:Name="dgIsTested" />
        <DataGridTextColumn Binding="{Binding TABLE_NAME}" />
        <DataGridTextColumn Binding="{Binding COLUMN}" />
        <DataGridComboBoxColumn x:Name="dgProposedDataType" />
    </DataGrid.Columns>
</DataGrid>

Чтобы выбор в ComboBox был сохранен, вам понадобится столбец для хранения значения:

<DataGridComboBoxColumn x:Name="dgProposedDataType" SelectedItemBinding="{Binding YourColumn}" />

Вам необходимо добавить этот столбец в свой DataTable, если он не является частью вашего SELECT утверждения:

private void OnLoaded(object sender, RoutedEventArgs e)
{
    //Connect to SQL Database
    connObj = new SqlConnection(connection);
    cmdObj = new SqlCommand("SELECT DISTINCT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS", connObj);
    daAdapObj = new SqlDataAdapter(cmdObj);
    daAdapObj.Fill(dsObj, "Table");

    var table = dsObj.Tables["Table"];
    table.Columns.Add("YourColumn");
    dgDatabase.ItemsSource = table.DefaultView;

    String[] myArray = { "Generic", "Number", "Date" };
    dgProposedDataType.ItemsSource = myArray;
}
1
mm8 1 Мар 2018 в 19:08