2016-05-19 15 views
1

Ich versuche, eine Combobox-Spalte in XCeeds DataGridControl hinzuzufügen. Wird verwaltet, um eine CellEditor, die richtige Werte für das gebundene Feld setzt, aber es gibt Probleme mit der Vorlage CellContent.Hinzufügen von ComboBox-Spalte in XCeed DataGridControl (WPF)

XAML:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <xcdg:DataGridControl ItemsSource="{Binding Address}" > 
     <xcdg:DataGridControl.Columns> 
      <xcdg:Column x:Name="clmAdd" FieldName="HouseNumberAdd"/> 
      <xcdg:Column x:Name="clmCity" FieldName="City"/> 
      <xcdg:Column x:Name="clmCountry" FieldName="CountryID"> 
       <xcdg:Column.CellEditor> 
        <xcdg:CellEditor> 
         <xcdg:CellEditor.EditTemplate> 
          <DataTemplate> 
           <ComboBox SelectedValuePath="CountryID" 
              DisplayMemberPath="Name" 
              ItemsSource="{Binding Path=DataContext.Country, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
              SelectedValue="{xcdg:CellEditorBinding}" IsEditable="True" Foreground="Black" IsSynchronizedWithCurrentItem="True" /> 
          </DataTemplate> 
         </xcdg:CellEditor.EditTemplate> 
        </xcdg:CellEditor> 
       </xcdg:Column.CellEditor> 
      </xcdg:Column> 
     </xcdg:DataGridControl.Columns> 
    </xcdg:DataGridControl> 
</Grid> 

-Code:

public partial class MainWindow : Window 
{ 
    ViewMode viewMode; 
    public MainWindow() 
    { 
     InitializeComponent(); 

     viewMode = new ViewMode(); 
     this.DataContext = viewMode; 
    } 

    private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     DataTable source = viewMode.Address; 
    } 
} 

public class ViewMode 
{ 
    public DataTable Address { get; set; } 
    public DataTable Country { get; set; } 

    public ViewMode() 
    { 
     Address = new DataTable(); 
     Address.Columns.Add("HouseNumberAdd", typeof(string)); 
     Address.Columns.Add("City", typeof(string)); 
     Address.Columns.Add("CountryID", typeof(int)); 

     Address.Rows.Add("Ivlivensko 10-KV 1234", "Krakov", 1); 
     Address.Rows.Add("Astrakhanski 10-KV 1234", "Kharkiv", 2); 
     Address.Rows.Add("Tverskii 10-KV 1234", "Moskva", 3); 
     Address.Rows.Add("Klement 10-KV 1234", "Warsav", 1); 

     Country = new DataTable(); 
     Country.Columns.Add("Name", typeof(string)); 
     Country.Columns.Add("CountryID", typeof(int)); 

     Country.Rows.Add("Poland", 1); 
     Country.Rows.Add("Ukrain", 2); 
     Country.Rows.Add("Russland", 3); 
    } 
} 

EDITED::

Ich habe CellEditor durch Content ersetzt, aber wenn ich versuche, zu bearbeiten die Daten innerhalb von Grid, bleibt die Quellentabelle die s ein Ich. Wie kann ich das beheben?

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <xcdg:DataGridControl ItemsSource="{Binding Address}" > 
     <xcdg:DataGridControl.Columns> 
      <xcdg:Column x:Name="clmAdd" FieldName="HouseNumberAdd"/> 
      <xcdg:Column x:Name="clmCity" FieldName="City"/> 
      <xcdg:Column x:Name="clmCountry" FieldName="CountryID"> 
       <xcdg:Column.CellContentTemplate> 
        <DataTemplate x:Name="clmCountryTmp"> 
         <ComboBox SelectedValuePath="CountryID" 
           DisplayMemberPath="Name" 
           ItemsSource="{Binding Path=DataContext.Country, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
           SelectedValue="{xcdg:CellEditorBinding}"/> 
        </DataTemplate> 
       </xcdg:Column.CellContentTemplate> 
      </xcdg:Column> 
     </xcdg:DataGridControl.Columns> 
    </xcdg:DataGridControl> 
</Grid> 
+0

ist es unklar, welche Probleme was Sie haben. – StepUp

Antwort

2

Versuchen IsSynchronizedWithCurrentItem="True"

In meinen Tests zu entfernen, mit dieser dem Textwert erscheint in der Combobox verhindert, wenn im Bearbeitungsmodus gehen. Sobald ich es entfernt habe, wurde der Text wie erwartet angezeigt. Wenn Sie das Aussehen der Zelle ändern möchten, wenn sie sich nicht im Bearbeitungsmodus befindet, können Sie der Spalte eine benutzerdefinierte CellContentTemplate zuweisen.

+0

Thx. Ich habe den CellEditor durch ContentTemplate ersetzt, aber wenn ich es bearbeite, ändern sich die Quelldaten nicht. Könnten Sie mir bitte dabei helfen? –

+0

gefunden, wie das zu beheben, hinzugefügt CellEditorDisplayConditions = "Immer" thx –

Verwandte Themen