[英]Add drop-down column in datagrid
我想在顯示下拉列表的數據網格中創建一列。 我希望unit
列具有以下值的下拉列表: % 、 m/hr 、 mm 。 我怎樣才能在代碼隱藏中做到這一點?
DataTable dt2 = new DataTable();
DataColumn description = new DataColumn("Description", typeof(string));
DataColumn unit = new DataColumn("Unit", typeof(string));
DataColumn case1 = new DataColumn("Case 1", typeof(string));
DataColumn case2 = new DataColumn("Case 2", typeof(string));
DataColumn case3 = new DataColumn("Case 3", typeof(string));
DataColumn case4 = new DataColumn("Case 4", typeof(string));
DataColumn case5 = new DataColumn("Case 5", typeof(string));
DataColumn case6 = new DataColumn("Case 6", typeof(string));
DataColumn max = new DataColumn("Max", typeof(string));
dt.Columns.Add(description);
dt.Columns.Add(unit);
dt.Columns.Add(case1);
dt.Columns.Add(case2);
dt.Columns.Add(case3);
dt.Columns.Add(case4);
dt.Columns.Add(case5);
dt.Columns.Add(case6);
dt.Columns.Add(max);
dt.Rows.Add("Mist fraction - predicted", "%", "0.00", "0.00");
dt.Rows.Add(" ", " ", " ", " "," "," ");
dt.Rows.Add("Mist flow rate", "m/hr", "0.00", "0.00");
dataGrid2.ItemsSource = dt2.DefaultView;
<DataGrid x:Name="dataGrid2" ColumnWidth="*"/>
要使用組合框顯示單元格,您必須在DataGridComboBoxColumn
中使用DataGrid
。 默認情況下,WPF DataGrid
會自動為您的項目源生成列。 在生成列時,您可以掛接到AutoGeneratingColumn 事件以用DataGridComboBoxColumn
替換Unit
數據列。
這是您將原始代碼放入方法並進行清理。 它將事件處理程序添加到自動生成的列事件中。
private void Create()
{
var dataTable = new DataTable();
var description = new DataColumn("Description", typeof(string));
var unit = new DataColumn("Unit", typeof(string));
var case1 = new DataColumn("Case 1", typeof(string));
var case2 = new DataColumn("Case 2", typeof(string));
var case3 = new DataColumn("Case 3", typeof(string));
var case4 = new DataColumn("Case 4", typeof(string));
var case5 = new DataColumn("Case 5", typeof(string));
var case6 = new DataColumn("Case 6", typeof(string));
var max = new DataColumn("Max", typeof(string));
dataTable.Columns.Add(description);
dataTable.Columns.Add(unit);
dataTable.Columns.Add(case1);
dataTable.Columns.Add(case2);
dataTable.Columns.Add(case3);
dataTable.Columns.Add(case4);
dataTable.Columns.Add(case5);
dataTable.Columns.Add(case6);
dataTable.Columns.Add(max);
dataTable.Rows.Add("Mist fraction - predicted", "%", "0.00", "0.00");
dataTable.Rows.Add(" ", " ", " ", " ", " ", " ");
dataTable.Rows.Add("Mist flow rate", "m/hr", "0.00", "0.00");
// Hook into the event to replace the column
dataGrid2.AutoGeneratingColumn += OnAutoGeneratingColumn;
dataGrid2.ItemsSource = dataTable.DefaultView;
}
這是替換Unit
列的事件處理程序。
private void OnAutoGeneratingColumn(object? sender, DataGridAutoGeneratingColumnEventArgs e)
{
if(e.Column.Header.Equals("Unit"))
{
// These are the drop-down items
var units = new List<string> { "%", "m/hr", "mm" };
// Create a new combo-box column
var unitColumn = new DataGridComboBoxColumn
{
Header = e.Column.Header,
ItemsSource = units,
SelectedValueBinding = new Binding("Unit")
};
// Replace the auto-generated column
e.Column = unitColumn;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.