none
Checkbox im Datagrid, Binding an Datatable RRS feed

  • Frage

  • Hallo,

     

    ich habe ein Datagrid welches eine checkbox template column besitzt, die an eine Datatablespalte gebunden ist.

     

                DataSet ds = new DataSet();

                if (kva.Artikel != null)
                {
                    ds.Tables.Add(kva.Artikel);
                    selectArticle_Grid.ItemsSource = ds.Tables[0].DefaultView;
                }

     

    Das Datagrid sieht so aus:

    <dg:DataGrid x:Name="selectArticle_Grid" Height="503" Width="auto" AutoGenerateColumns="False" SelectionMode="Extended" CanUserAddRows="False"  Style="{DynamicResource DataGridDemoStyle}">
                <dg:DataGrid.Columns>
                    <dg:DataGridTextColumn Binding="{Binding Path=Bezeichnung}" Header="Artikelbezeichnung"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=Artikelnummer}" Header="Artikelnummer"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=Preis}" Header="Preis/Stück"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=Lieferant}" Header="Lieferantenname"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=Lieferantennummer}" Header="Lieferantennummer"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=letzte_bestellung_datum}" Header="letzte Bestellung"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=letzte_bestellung_menge}" Header="letzte Bestellmenge"/>
                    <dg:DataGridTextColumn Binding="{Binding Path=Bemerkung}" Header="Bemerkung"/>
                    <dg:DataGridTemplateColumn MinWidth="50" Header="hinzufuegen" SortMemberPath="hinzufuegen" Width="*">
                        <dg:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding Path=hinzufuegen}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </DataTemplate>
                        </dg:DataGridTemplateColumn.CellTemplate>
                    </dg:DataGridTemplateColumn>
                   
                </dg:DataGrid.Columns>
            </dg:DataGrid>

     

    Jetzt habe ich das Problem, dass wenn ich in dem Datagrid eine Checkbox auswähle, der Wert in der Datatable nicht geändert wird.

    Ich benutze genau den gleichen Xaml Code an anderer Stelle nochmal und dort funktioniert das Binding und das zurückschreiben in die Datatable.

    Ich hoffe ihr könnt mir sagen, was ich falsch mache.

     

    Danke schonmal für alle Antworten

     

    Samstag, 19. Februar 2011 15:13

Antworten

  • Danke für eure Antworten,

    also wir habe das jetzt anders gelöst und nicht über das Databinding gearbeitet.

    Aber wenn noch jemand eine Erklärung hat, würde mich das doch wohl interessieren. ;)

     

    Grüße

    Montag, 21. Februar 2011 21:11

Alle Antworten

  • Hi,

    Der XAML-Code sieht soweit korrekt aus. Schau doch mal beim Debuggen in das Output-Fenster von Visual Studio. Falls es ein Binding-Problem ist, sollten dort Fehlermeldungen stehen.

    Gruß

    Jus

     

    Samstag, 19. Februar 2011 21:43
  • Hallo,

    denke nicht das du im Output Fenster was findest. Nimm doch einfach DataGridCheckBoxColumn mit dem funktionierts.

    <DataGridCheckBoxColumn
              Header="hinzufuegen"
              Binding="{Binding hinzufuegen}">
              <DataGridCheckBoxColumn.ElementStyle>
                <Style TargetType="CheckBox">
                  <Setter
                    Property="HorizontalAlignment"
                    Value="Center"/>
                  <Setter
                    Property="VerticalAlignment"
                    Value="Center" />
                </Style>
              </DataGridCheckBoxColumn.ElementStyle>
    </DataGridCheckBoxColumn>
    

    Hope this helps

    Samstag, 19. Februar 2011 22:05
  • Setzt den Binding Mode mal auf TwoWay.

    <CheckBox IsChecked="{Binding Path=hinzufuegen, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
     
    Sonntag, 20. Februar 2011 12:05
    Beantworter
  • Danke für eure Antworten.

     

    Ich habe jetzt eine "Datagridcheckboxcolumn" zu nehmen und den Binding Mode auf "Twoway" gesetzt, leider hilft keins von beidem.

    Das Feld bleibt, egal ob markiert oder nicht, auf false.

    Habt ihr noch andere Ideen?

     

    Grüße

    Sonntag, 20. Februar 2011 19:24
  • Danke für eure Antworten.

     

    Ich habe jetzt eine "Datagridcheckboxcolumn" zu nehmen und den Binding Mode auf "Twoway" gesetzt, leider hilft keins von beidem.

    Das Feld bleibt, egal ob markiert oder nicht, auf false.

    Habt ihr noch andere Ideen?

     

    Grüße

    Sonntag, 20. Februar 2011 19:24
  • Was für ein Datentyp hat denn die DB Spalte?
    Evtl. musst du einen IValueConverter einbauen, und die Werte konvertieren!

     

    Montag, 21. Februar 2011 07:39
    Beantworter
  • Als Datentyp wird Bit benutzt.
    Montag, 21. Februar 2011 10:01
  • Der Mode muss auf jeden Fall auf Two stehen, damit die DatenBindung in beide Richtungen funktioniert.

    Hast du mal getestet, ob die DataTable mit True/False oder 0/1 klar kommt?


    Montag, 21. Februar 2011 10:22
    Beantworter
  • Danke für eure Antworten,

    also wir habe das jetzt anders gelöst und nicht über das Databinding gearbeitet.

    Aber wenn noch jemand eine Erklärung hat, würde mich das doch wohl interessieren. ;)

     

    Grüße

    Montag, 21. Februar 2011 21:11