我有以下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;
}
现在,我面临两个问题:
任何帮助表示赞赏
您可以通过将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;
}