2013-03-02 2 views
4

힐로들 ..바인딩 사전

내 생각은 데이터를 표시 할 콜 럼 중 하나를 먼저 그리드에서 데이터를로드하는 매퍼 템플릿으로 사용하여 DataGrid을 "표 A"를 가정 해 봅시다, whis입니다 "표 B"

을 가정 해 봅시다에서 나는이 같은 "표 B"가 :

fieldtype_id | fieldtype_name 
    1    int 
    2    varchar 
    3    date 

내가 DataGridComboBoxColumn를 사용하여 WPF DataGrid에이 테이블을 표시합니다.

은 그래서, 아래 XAML

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="12,123,0,176" Name="dataGrid1" Width="1000" 
       ItemsSource="{Binding}" SelectionUnit="CellOrRowHeader" CanUserAddRows="False" 
       CellEditEnding="dataGrid1_CellEditEnding" CurrentCellChanged="dataGrid1_CurrentCellChanged"> 

     <DataGrid.Columns> 

      <DataGridComboBoxColumn 
          Header="Field Type" Width="200" 
          DisplayMemberPath="Value" 
          SelectedValueBinding="{Binding fieldtypeSS, Mode=TwoWay}" 
          SelectedValuePath="{Binding fieldtype_id}"> 

       <DataGridComboBoxColumn.ElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="IsSynchronizedWithCurrentItem" Value="False" /> 
         <Setter Property="ItemsSource" Value="{Binding Path=fieldtype_id}" /> 
        </Style> 
       </DataGridComboBoxColumn.ElementStyle> 

       <DataGridComboBoxColumn.EditingElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Path=fieldtype_id}" /> 
         <Setter Property="IsDropDownOpen" Value="True" /> 
        </Style> 
       </DataGridComboBoxColumn.EditingElementStyle> 
      </DataGridComboBoxColumn> 


     </DataGrid.Columns> 

</DataGrid> 

, 그것은 내부 WPF 창 데이터 격자를 생성하고, I는 클래스 생성 : 다음

public class cMapHeader 
{ 
    public int fieldtypeSS { get; set; } 
    public Dictionary<string, string> fieldtype_id { get; set; } 
} 

을 방법을 사용하여 테이블을 채우는 내가

//## Get MysqlFieldType 
//## dboperation.dtQueries is my method to populate data, and return as DataTable 
Dictionary<string, string> mysqlFieldType = new Dictionary<string, string>(); 

foreach (DataRow row in dboperation.dtQueries("SELECT fieldtype_id, fieldtype_name FROM mysql_Fieldtype ").Rows) 
{ 
    mysqlFieldType.Add(row["fieldtype_id"].ToString(), row["fieldtype_name"] as string); 
} 

다음 이전에 만든 것으로, 격자 채우기

gridMapHeader = new ObservableCollection<cMapHeader>() 
     { 
      new cMapHeader(){fieldtypeSS="1",fieldtype_id=mysqlFieldType}, 
      new cMapHeader(){fieldtypeSS="2",fieldtype_id=mysqlFieldType} 

     }; 
dataGrid1.BeginInit(); 

dataGrid1.SetBinding(ItemsControl.ItemsSourceProperty, new Binding 
     { 
     Source = gridMapHeader 
     }); 

fieldtypeSS를 포함해야하는 셀은 표시되지 않지만 편집 모드에서는 DataGridComboBoxColumn이 값을 올바르게 표시합니다 ("표 B"의 fieldtype_name 만 표시).

셀이 초점을 잃었을 때 다음 두 번째 문제는, DataGridComboBoxColumn에서 선택 된 값이 손실됩니다 ..

이 사람이 나를 도울 수 ?

정말 어떤 도움 주셔서 감사합니다 : D를

들으 B4에

답변

1

문제, 당신의 모두 해결하려면

SelectedValuePath = "{바인딩 fieldtype_id}"

해야을 be :

SelectedValuePath = "fieldtype_id"