2014-11-23 2 views
0

나는 이제 막 포기합니다. 이 DataGridComboBoxColumn을 DataGrid의 DataContext (DataSet)에 바인딩하려고했지만 그럴 수 없습니다. 코드는 다음과 같습니다DataGrid DataContext에 대한 DataGridComboBoxColumn 바인딩

에서 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을 내 콤보 상자 항목으로 관리하기 만했습니다.

는 XAML :

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

는 그래서 모두가 원하는 내 DataSet에 내 DataGridComboBoxColumn을 결합이다 :

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

사용자가 편집 완료 후, 나는 사용하여 내 데이터베이스에 데이터를 업로드 할 수 있습니다. 또한 선택한 항목이 DataGrid 셀에 표시되지 않습니다.

도움이 될 것입니다.

답변

0

당신은 내가 당신의 기본보기 모델 (메인 윈도우의 DataContext를)한다고 가정 DataGridComboBoxColumn

에 대한 ItemsSource를 설정하지 않은 그런 다음이 작동합니다 모든 콤보 상자 (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>