Deklaration Checkbox im DataGridTemplate

  • WPF

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Deklaration Checkbox im DataGridTemplate

    Ich nutze folgendes DataGridTemplate:

    XML-Quellcode

    1. <DataGridTemplateColumn>
    2. <DataGridTemplateColumn.Header>
    3. <StackPanel Orientation="Horizontal">
    4. <Label Content="select"/>
    5. <CheckBox Name="CbQuelle" Height="15" Width="15" VerticalContentAlignment="Stretch" Background="Transparent"/>
    6. </StackPanel>
    7. </DataGridTemplateColumn.Header>
    8. <DataGridTemplateColumn.CellTemplate>
    9. <DataTemplate >
    10. <CheckBox Name="CbZiel" HorizontalAlignment="Center" Background="Transparent" IsChecked="{Binding ElementName=CbQuelle, Path=IsChecked, Mode=OneWay}"/>
    11. </DataTemplate>
    12. </DataGridTemplateColumn.CellTemplate>
    13. </DataGridTemplateColumn>


    Es will mir nicht gelingen der CheckBox "CbZiel" eine Deklaration in der Art "Dim CbZiel = Me.CbZiel" im vb Code zuzuweisen. Wie geht das?
    Hallo

    So geht's: ​Dim CbZiel = Me.CbZiel​.isChecked

    ​Aber(!): Du solltest aber in der WPF mit Binding arbeiten, gerne kann ich dir hier Tipps geben.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ich habe es etwas überarbeitet :

    XML-Quellcode

    1. <DataGridCheckBoxColumn x:Name="CbZiel" >
    2. <DataGridCheckBoxColumn.Header>
    3. <StackPanel Orientation="Horizontal">
    4. <Label Content="select"/>
    5. <CheckBox Name="CbQuelle" Height="15" Width="15" VerticalContentAlignment="Stretch" Background="Transparent"/>
    6. </StackPanel>
    7. </DataGridCheckBoxColumn.Header>
    8. <DataGridCheckBoxColumn.ElementStyle>
    9. <Style TargetType="CheckBox">
    10. <Setter Property="Background" Value="Transparent"/>
    11. <Setter Property="HorizontalAlignment" Value="Center"/>
    12. </Style>
    13. </DataGridCheckBoxColumn.ElementStyle>
    14. </DataGridCheckBoxColumn>


    Außerdem weiß ich nicht wohin das Bindin zwischen CBQuelle und CB Ziel bei IsChecked kommt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thomas2705“ ()

    Ach, habe gerade gesehen das du die Checkbox in deinem CellTemplate auf die des Header Binden möchtest!

    ​Mal aussen vor was dies für einen Sinn hat aber OK. Willst du das so?
    Bitte erkläre mal unabhängig von dem was du jetzt hast, was willst du erreichen?

    Hier gibt es bestimmt einen besseren Weg.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ich will durch die CheckBox einen oder mehrere Items wählen können und speziell diesen Datensatz ausdrucken. Es handelt sich um ca. 500 mögliche Datensätze. Um nicht jeden DS einzeln anclicken zu müssen, befindet sich Checkbox auch im Header. CheckBox im Header übergibt IsChecked an CheckBox "CbZiel"

    DataGridCheckBoxColumn hat kein "IsChecked" Ereignis bzw. ich weiß nicht wo ich es finde.

    Ich habe es jetzt so "zusammengefrickelt":

    XML-Quellcode

    1. <DataGridCheckBoxColumn x:Name="CbZiel" Binding="{Binding ElementName=CbQuelle, Path=IsChecked, Mode=OneWay}">
    2. <DataGridCheckBoxColumn.Header>
    3. <StackPanel Orientation="Horizontal">
    4. <Label Content="select"/>
    5. <CheckBox Name="CbQuelle" Height="15" Width="15" VerticalContentAlignment="Stretch" Background="Transparent"/>
    6. </StackPanel>
    7. </DataGridCheckBoxColumn.Header>
    8. <DataGridCheckBoxColumn.ElementStyle>
    9. <Style TargetType="CheckBox">
    10. <Setter Property="Background" Value="Transparent"/>
    11. <Setter Property="HorizontalAlignment" Value="Center"/>
    12. </Style>
    13. </DataGridCheckBoxColumn.ElementStyle>
    14. </DataGridCheckBoxColumn>


    Ist es richtig so?

    "Dim CbZiel = Me.CbZiel.isChecked" funktioniert nicht.

    Jetzt soll If CbZiel.IsChecked = True... eingefügt werden aber ich finde das Ereignis nicht. Jetzt sollten alle selectieren (isChecked) Datensätze angezeigt werden...


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thomas2705“ ()

    Hallo

    Wie bereits erwähnt klappt das so nicht wenn du kein Binding auf deine Klassen verwendest. An bei ein einfachen Beispiel mit Binding, so klappt das auch.
    Es gibt Workarounds das es so auch klappt, aber die sind mehr schlecht als recht. So wie du das machst das du der Checkbox einer Zelle einen Namen gibst kann das nicht gehen.
    Überlege mal: Wenn du 5 Datensätze hast, hast du ja auch 5 Checkboxen mit dem selben Namen, und wie man sich vorstellen kann, wird die WPF diese dann nicht mehr finden können.

    Schau dir das Beispiel mal an, vielleicht kommst du ja noch auf den Geschmack.

    Grüße
    Sascha
    Dateien
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ich habe mir das Beispiel jetzt angesehen und im Grunde genommen ist es das was ich mir zurechtgebaut habe. Jetzt geht es aber in einem zweiten Schritt auch darum, dass ich den selektierten Datensatz, alle selektierten Datensätze mit einer Abfrage an ein anderes Fenster übergebe; ausdrucke, exportiere.
    Die Datensätze selbst sind natürlich alle verschieden aber es sollen nur die durch CheckBox selektierten Datensätze ausgewählt werden.

    Der CheckBox habe ich jetzt einen Handler zugewiesen. Aber wie kann ich den Status der CheckBox auslesen um eine darauf basierende Abfrage zu erstellen?

    Folgendes habe ich jetzt:

    XML-Quellcode

    1. <DataGridCheckBoxColumn x:Name="CbZiel" Binding="{Binding ElementName=CbQuelle, Path=IsChecked, Mode=OneWay}" >
    2. <DataGridCheckBoxColumn.Header>
    3. <StackPanel Orientation="Horizontal">
    4. <Label Content="select"/>
    5. <CheckBox Name="CbQuelle" Height="15" Width="15" VerticalContentAlignment="Stretch" Background="Transparent"/>
    6. </StackPanel>
    7. </DataGridCheckBoxColumn.Header>
    8. <DataGridCheckBoxColumn.ElementStyle>
    9. <Style TargetType="CheckBox">
    10. <Setter Property="Background" Value="Transparent"/>
    11. <Setter Property="HorizontalAlignment" Value="Center"/>
    12. </Style>
    13. </DataGridCheckBoxColumn.ElementStyle>
    14. <DataGridCheckBoxColumn.CellStyle>
    15. <Style>
    16. <EventSetter Event="CheckBox.Checked" Handler="OnChecked" />
    17. </Style>
    18. </DataGridCheckBoxColumn.CellStyle>
    19. </DataGridCheckBoxColumn>


    Im Cell Style ist jetzt das Ereignis hinterlegt. Das funktioniert. Bei Checked ändert sich der Status der Checkbox. als nächstes soll eine Abfrage mit Bedingung erfolgen so in dieser Art:

    If CbZiel.Checked = True Then

    ---und hier die eigendliche Abfrage...

    End If



    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thomas2705“ ()

    Hallo

    Sorry, dadurch das du den Beitrag editiert hast, mich aber nicht merkiert hast hatte ich Ihn nihct gesehen, weshalb ich erst jetzt Antworte.

    Thomas2705 schrieb:

    Der CheckBox habe ich jetzt einen Handler zugewiesen. Aber wie kann ich den Status der CheckBox auslesen um eine darauf basierende Abfrage zu erstellen?


    Ist ja wieder nicht mit Binding. du benötigst keinen Handler. Du hastr in der Klasse das Propertie ob True oder False. Wenn du dir ansiehst wie ich im Setter des Properties CheckAll das Property IsChecked jedes Items setze, dann fält dir sicher auch ein wie du es Abrufen könntest oder? Hast du es nun so wie ich vorgeschlagen implementiert?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.