我试图在DataGridComboBoxColumn
中将特定项目设置为selectedItem。然而,经过大量的研究,我还没有找到合适的答案。
我的情景:
我以编程方式创建了DataGrid
,ObservableCollection<>
为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
答案 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";
}