2014-11-23 3 views
0

Я собираюсь сдаться. Я пытаюсь связать этот DataGridComboBoxColumn с DataContext DataGet DataCet (DataSet), но я просто не могу. Код выглядит следующим образом:DataGridComboBoxColumn привязка к DataGrid DataContext

UserControl C#:

private static String strDBPath = EMS.Properties.Settings.Default.DBFile; 
private static OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDBPath + ";Jet OLEDB:Engine Type=5"); 
private static string strProp = "SELECT * FROM tblProperties"; 
private static OleDbDataAdapter adapterProp = new OleDbDataAdapter(strProp, myConn); 
private static DataSet dsProp = new DataSet(); 
public ObservableCollection<string> VarTypes { get; set; } 

public UserControlPropertiesAccess() { 
    VarTypes = new ObservableCollection<string>() { "N", "Bool", "A2", "A4", "A8", "A20", "A50", "A100", "A200", }; 

    InitializeComponent(); 
    DatabaseHandling.CreateTable("tblProperties"); 
    adapterProp.Fill(dsProp, "LoadDataBindingProp"); 
    dgProperties.DataContext = dsProp; 
} 

В dsProp У меня есть следующие поля: PropID, PROPNAME, PropVarType и PropUnit. Я использую привязку для отображения последних трех полей в других столбцах в моем DataGrid, и все работает отлично. Когда я пытаюсь использовать DataGridComboBoxColumn, он просто не привязывается к DataContext. Мне удалось получить мой ObservableCollection в качестве моих элементов combobox.

XAML:

<DataGrid Name="dgProperties" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="LightCyan" Style="{StaticResource AzureDataGrid}" AutoGenerateColumns="False" CanUserAddRows="False" SelectionMode="Single" ItemsSource="{Binding Path=LoadDataBindingProp}" IsReadOnly="True" SelectionChanged="dgProperties_SelectionChanged"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path=PropName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Property" Width="150" /> 
      <DataGridComboBoxColumn x:Name="dgcmbProperties" SelectedItemBinding="{Binding Path=PropName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Variable" Width="80" /> 
      <DataGridTextColumn Binding="{Binding Path=PropUnit, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Unit" Width="100" /> 
     </DataGrid.Columns> 
    </DataGrid> 

После того, как пользователь закончит редактирование, загружать данные в свою базу данных с помощью:

private void btnSaveProperty_Click(object sender, RoutedEventArgs e) 
    { 
     myConn.Open(); 
     adapterProp.Update(dsProp.Tables[0]); 
     myConn.Close(); 
    } 

Так что я все хочу связать свою DataGridComboBoxColumn к моей DataSet. Кроме того, выбранный элемент не отображается в ячейке DataGrid.

Любая помощь будет очень оценена.

ответ

0

Вы не установили ItemsSource для DataGridComboBoxColumn

Я полагаю, ваш основной вид модели (DataContext главного окна) имеет коллекцию, содержащую все элементы поля со списком (как MyComboItems)

Тогда это должно работать:

<Window x:Name="root"> 
    <DataGrid ItemsSource="{Binding Path=LoadDataBindingProp}"> 
     <DataGrid.Columns> 
      <DataGridComboBoxColumn x:Name="dgcmbProperties" Header="Variable" 
        ItemsSource="{Binding 
         ElementName=root, 
         Path=DataContext.MyComboItems}" 
        SelectedItemBinding="{Binding 
         Path=PropName, 
         Mode=TwoWay, 
         UpdateSourceTrigger=PropertyChanged}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</Window> 
Смежные вопросы