DataGridComboBoxColumn值在选择后重置

时间:2018-03-01 15:33:37

标签: c# wpf

我有以下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?
  3. 感谢任何帮助

1 个答案:

答案 0 :(得分: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;
}
相关问题