设置DataGridComboBoxColumn选中的项目

时间:2016-08-23 12:39:57

标签: c# wpf datagrid observablecollection datagridcomboboxcolumn

我试图在DataGridComboBoxColumn中将特定项目设置为selectedItem。然而,经过大量的研究,我还没有找到合适的答案。

我的情景:
我以编程方式创建了DataGridObservableCollection<>ItemsSource。作为最后一栏,我想添加DataGridComboBoxColumn以向用户提供可供选择的选项。由于这些数据已经可以存储在数据库中,我需要预先设置&#34;存储在数据库中的集合中的值。

private void ManipulateColumns(DataGrid grid)
{
    ...
    DataGridComboBoxColumn currencies = new DataGridComboBoxColumn();
    //Here come the possible choices from the database
    ObservableCollection<string> allCurrencies = new ObservableCollection<string>(Data.AllCurrencys); 
    currencies.ItemsSource = allCurrencies;
    currencies.Header = "Currency";
    currencies.CanUserReorder = false;
    currencies.CanUserResize = false;
    currencies.CanUserSort = false;
    grid.Columns.Add(currencies);
    currencies.MinWidth = 100;
    //Set the selectedItem here for the column "Currency"
    ...
}

我找到了许多教程,用于为普通的ComboBox设置所选项目,但不为DataGridComboBoxColumns设置。我已经使用currencies.SetCurrentValue()进行了尝试,但我无法从DependencyProperty找到合适的DataGridComboBoxColumn。 有人可以帮帮我吗?

提前致谢。
Boldi

1 个答案:

答案 0 :(得分:0)

使用C#代码构建一个像这样的DataGrid很麻烦。您应该真正看一下使用数据绑定。如果您想继续在C#中构建它,那么您将不得不设置每个 Row 的值。没有办法为列中的所有行设置默认值。假设我的DataGrid绑定到Book类型的集合。我可以使用DataGrid SelectedItem属性来获取所选行的Book对象,然后设置它的currency属性。您将不得不弄清楚您需要设置值的行,获取该行的对象,然后设置其currency属性。这不是一个完整的答案,但它会让你开始。实质上,您将不得不为DataGrid中的每个项目而不是列设置它。

public class  Book
{
    public decimal price;
    public string title;
    public string author;
    public string currency;
}

private void ManipulateColumns(DataGrid grid)
{

    DataGridComboBoxColumn currencies = new DataGridComboBoxColumn();
    //Here come the possible choices from the database
    System.Collections.ObjectModel.ObservableCollection<string> allCurrencies = new System.Collections.ObjectModel.ObservableCollection<string>();
    allCurrencies.Add("US");
    allCurrencies.Add("asdf");
    allCurrencies.Add("zzz");
    currencies.ItemsSource = allCurrencies;
    currencies.Header = "Currency";
    currencies.CanUserReorder = false;
    currencies.CanUserResize = false;
    currencies.CanUserSort = false;
    grid.Columns.Add(currencies);
    currencies.MinWidth = 100;
    //Set the selectedItem here for the column "Currency"
    //currencies.

    ((Book)grid.SelectedItem).currency = "US Dollar";
}