2017-02-08 2 views
0

WPF 프로그래밍을 처음 사용합니다.WPF에서 DatagridComboboxColumn 바인딩

나는 2 개의 열을 가진 DataGrid를 가지고 있습니다. 첫 번째 열은 dataGridTextColumn이고 두 번째 열은 DataGridComboboxColumn입니다.

데이터베이스에서 오는 2 개의 값이 있습니다. 하나의 가치는 내가 첫 번째 열 및 두 번째 값을 선택한 항목/값으로 comboboxcolumn의 그것을 사용하고자하는 DataGrid에 표시하고 싶습니다.

콤보 첨가되는 값 즉, 그리드 있지만 값없이 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 귀하의 데이터 그리드의 ItemsSource 속성이 ComboBox의 선택된 값을 저장하는 열이해야 DataTableDataTableDataView로 설정되어있는 경우
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, phase.phase_Id = phase.Id 및 details.Stake_Mem_Id = 1") 자세한 내용은 Stake_Mem_Details로 단계에서 details.Id, details.Imp_Value를 선택하십시오. 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; 

가 선택한 값은 어딘가에 저장해야합니다.