2017-02-08 6 views
0

Я новичок в программировании WPF.DatagridComboboxColumn Binding в WPF

У меня есть datagrid с 2 колонками. 1-й столбец - это dataGridTextColumn, а второй столбец - DataGridComboboxColumn.

У меня есть 2 значения, поступающие из базы данных. Одно значение, которое я хочу показать в datagrid 1st column и 2nd value, я хочу использовать его как выделенный элемент/значение comboboxcolumn.

значения, которые будут добавлены в поле со списком являются статическими, то есть от 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; 

Это показывает, выпадающий на 2-ом столбце сетки, но без значений.

Как я могу это сделать?

+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

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 ("select phase.Phase, details.Id, details.Imp_Value от фаз как фаза, Stake_Mem_Details как детали, где details.Phase_Id = phase.Id и details.Stake_Mem_Id = 1"); dg_phase_details.ItemsSource = новый DataView (ds_Phases.Tables [0]); ds_phases - это набор данных dg_phase_details is datagrid –

1

Если ItemsSource свойство вашего DataGrid имеет значение в DataView из DataTable в этом DataTable должна иметь столбец, который сохраняет выбранное значение ComboBox. Если этот столбец называется «YourColumn» вы можете связать SelectedItem свойства ComboBox к нему так:

<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; 

Выбранное значение должно быть где-то сохранено.