簡體   English   中英

在數據網格中添加下拉列

[英]Add drop-down column in datagrid

我想在顯示下拉列表的數據網格中創建一列。 我希望unit列具有以下值的下拉列表: %m/hrmm 我怎樣才能在代碼隱藏中做到這一點?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM