0

DataGridComboBoxColumnにselectedItemとして特定の項目を設定しようとしています。しかし、多くの研究、私はまだ私のための正解を見つけることはできません。DataGridComboBoxColumn選択項目を設定する

私のシナリオ:
私はプログラム的にItemsSourceとしてObservableCollection<>を持ってDataGridを作成しました。最後の列として、DataGridComboBoxColumnを追加して、ユーザーが選択できるようにします。このようなデータはすでにデータベースに保存されているので、データベースに格納されているコレクションの値を「事前設定」する必要があります。

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" 
    ... 
} 

私は通常のコンボボックスのために選択した項目を設定するためではなくDataGridComboBoxColumnsのための多くのチュートリアルを発見しました。私はすでにcurrencies.SetCurrentValue()で試してみましたが、DataGridComboBoxColumnからDependencyPropertyが見つかりませんでした。
誰かお手伝いできますか?

ありがとうございます。
Boldi

答えて

0

C#コードでDataGridを構築するのは面倒です。代わりに、データバインディングを使用してください。 C#でビルドを続ける場合は、の値をRowに設定する必要があります。列のすべての行にデフォルトを設定する方法はありません。私のDataGridがBook型のコレクションにバインドされているとします。 DataGrid SelectedItemプロパティを使用して、選択した行のブックオブジェクトを取得し、通貨プロパティを設定できます。値を設定し、その行のオブジェクトを取得してから、その通貨プロパティを設定する必要がある行を特定する必要があります。これは完全な答えではありませんが、それはあなたを始めさせるでしょう。基本的には、列ではなく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"; 
} 
+0

ヘブライ語、お返事ありがとうございます。私の目標は、実際にはすべての行についてコンボボックスの値を設定することです。私はあなたが何を意味するのか分かりません。私はこれを実装し、フィードバックを提供しようとします。しかし、これはDataGridにデータをバインドする通常の方法ではありませんか?私はObservableCollectionを取って、それを 'ItemsSource'として設定するのが正しい方法だと思っていました。しかし、私はC#の世界にはかなり新しいことを認めなければなりません。 – Boldi

関連する問題