我有以下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;
}
现在,我面临两个问题:
感谢任何帮助
答案 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;
}