DataGridComboBoxColumn值在选择后重置

问题描述 投票:0回答:1

我有以下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?

任何帮助表示赞赏

c# wpf
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.