2017-02-08 9 views
0

WPFプログラミングの初心者です。WPFでのDatagridComboboxColumnバインディング

私は2列のデータグリッドを持っています。 1列目はdataGridTextColumn、2列目はDataGridComboboxColumnです。

私は2つの値をデータベースから取得しています。 1つの値は、データグリッドの第1列と第2の値で表示したいのですが、これをcomboboxcolumnの選択項目/値として使用したいと思います。コンボボックスに追加する

値は、それはそれがグリッドの2列ではなく値のないコンボボックスを示す0から9まで

XAML 
<DataGrid x:Name="dg_phase_details" RowHeaderWidth="0" SelectionMode="Single" CellStyle="{StaticResource Body_Content_DataGrid_Centering}" AutoGenerateColumns="False" CanUserAddRows="False" HorizontalAlignment="Left" Margin="380,154,0,0" VerticalAlignment="Top" Height="320" Width="330" AlternationCount="2" AlternatingRowBackground="LightGray" RowHeight="30" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="Phase_Name" IsReadOnly="True" Header="Phases" Binding="{Binding Phase}" Width="*" ElementStyle="{StaticResource dg_Margin_left}"/> 
      <DataGridComboBoxColumn x:Name="Combo_Imp_Value" Header="Importance" Width="*" /> 
     </DataGrid.Columns> 
    </DataGrid> 

c# 
ObservableCollection<string> list_PhaseVal = new ObservableCollection<string>() { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 
Combo_Imp_Value.ItemsSource = list_PhaseVal; 

あり、静的です。

どうすればいいですか?

+1

コードを書いたことがありますか/最初にコード化しようとしましたか?あなたが最初から何かを始めた場合、あなたを始められる多くの例があります。 http://stackoverflow.com/questions/5409259/binding-itemssource-of-a-comboboxcolumn-in-wpf-datagrid –

+1

誰かが解決策を与えることができるようにXAMLコードまたはC#コードを与える –

答えて

1

コードにComboBoxColumnを作成し、項目に動的に項目をバインドします。 以下はサンプルコードです。それはあなたの更新の問題の声明によると

DataGridComboBoxColumn combo = new DataGridComboBoxColumn(); 
string[] datasource = { "0", "1","2","3","4","5","6","7","8","9"}; 
combo.ItemsSource= datasource; 
dataGrid1.Columns.Add(combo); 

UPDATE

いくつかの新しいアップデートがお役に立てば幸いです(いずれかの問題がコメントしてください場合)

このようなDataGridComboBoxColumn置き換えます。

<DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate> 
         <ComboBox x:Name="myCmb" Loaded="myCmb_Loaded" SelectedItem="{Binding Value}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
      </DataGridTemplateColumn> 

CS

0あなたのDataGridの ItemsSourceプロパティが ComboBoxの選択された値を格納する列を持っている必要があり DataTableこの DataTableDataViewに設定されている場合
private void myCmb_Loaded(object sender, RoutedEventArgs e) 
     { 
      ComboBox cmb = (ComboBox)sender; 
      ObservableCollection<string> list_PhaseVal = new ObservableCollection<string>() { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 
      cmb.ItemsSource = list_PhaseVal; 
     } 
+0

これは既に行われています..私は質問を更新しました。それを参照して貴重な提案をしてください。 –

+0

@MohammadSherif DataGrid "dg_phase_details"をバインドする方法、ItemsSourceとは何ですか? –

+0

ds_Phases = DbHelper.getData( "相として位相からphase.Phase、details.Id、details.Imp_Valueを選択details.Phase_Id = phase.Id詳細などStake_Mem_Detailsとdetails.Stake_Mem_Id = 1")。 dg_phase_details.ItemsSource =新しいDataView(ds_Phases.Tables [0]); ds_phasesはデータセット dg_phase_detailsはデータグリッド –

1

。この列は「YourColumn」と命名されている場合は、このようにそれにコンボボックスのSelectedItemプロパティをバインドできます。

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding YourColumn}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox x:Name="myCmb" Loaded="myCmb_Loaded" SelectedItem="{Binding YourColumn}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

のDataTableには、そのような列が存在しない場合は、それを追加する必要があります

DataTable dt = new DataTable(); 
dt.Columns.Add(new DataColumn("YourColumn")); 
dg_phase_details.ItemsSource = dt.DefaultView; 

を選択した値はどこかに保存する必要があります。

関連する問題