Datagrid property "AcceptsReturn"

  • WPF

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

    Datagrid property "AcceptsReturn"

    Hi,

    ich habe einen Datagrid mit itemssource und möchte gern bei editieren einer Zelle, das bei der Return Taste ein zeilenumbruch (linebreak) stattfindet. Weiss wer wie das geht? Das netz gibt nur lösungen für einen DG ohne itemssource :(
    Ich denke Wordwrapping muss auch gleichzeitig auf True gesetzt werden.

    Jemand ne Idee?

    Vielen Dank

    r0tzi schrieb:

    Ich denke Wordwrapping muss auch gleichzeitig auf True gesetzt werden.

    Versuche es einmal so (siehe Beispiel):
    Spoiler anzeigen

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:WpfApp1"
    7. mc:Ignorable="d"
    8. Title="MainWindow" Height="300" Width="500">
    9. <DataGrid DataContext="{StaticResource DeineViewSource}">
    10. <DataGrid.Columns>
    11. <!--Name des Mitarbeiters-->
    12. <DataGridTemplateColumn Header="Name des Mitarbeiters" Width="*" >
    13. <DataGridTemplateColumn.CellTemplate>
    14. <DataTemplate>
    15. <Border Style="{StaticResource DeinBorderStyle}">
    16. <TextBox Text="{Binding Employee, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontWeight="Bold" HorizontalContentAlignment="Left"/>
    17. </Border>
    18. </DataTemplate>
    19. </DataGridTemplateColumn.CellTemplate>
    20. </DataGridTemplateColumn>
    21. </DataGrid.Columns>
    22. <!--Notiz als Detail-->
    23. <DataGrid.RowDetailsTemplate>
    24. <DataTemplate>
    25. <Grid Background="AliceBlue">
    26. <Grid.ColumnDefinitions>
    27. <ColumnDefinition Width="40"/>
    28. <ColumnDefinition Width="*"/>
    29. </Grid.ColumnDefinitions>
    30. <Label Content="Notiz:"/>
    31. <TextBox Grid.Column="1"
    32. Text="{Binding Note, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    33. TextWrapping="Wrap" AcceptsReturn="True"/>
    34. </Grid>
    35. </DataTemplate>
    36. </DataGrid.RowDetailsTemplate>
    37. </DataGrid>
    38. </Window>

    r0tzi schrieb:

    Hi, danke jedoch wurde hier ja eine Textbox hinzugefügt wo natürlich das Return etc funktioniert klar

    Ja, und weiter? In einer TextColumn ist nichts anderes. Nur das diese vor dir "versteckt" wird. Im ColumnsTemplate hast du volle kontrolle. Also genau das was du suchst.
    Oder woran scheitert es?

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Aber @VB1963 hat dir ja bereits alles zur Verfügung gestellt.

    XML-Quellcode

    1. <DataGrid ItemsSource="{Binding Persons}" SelectedItem="{Binding SelectedPerson}">
    2. <DataGrid.Columns>
    3. <DataGridTextColumn Header="Vorname" Binding="{Binding Firstname}"/>
    4. <DataGridTemplateColumn Header="MultilineTest" Width="*" >
    5. <DataGridTemplateColumn.CellTemplate>
    6. <DataTemplate>
    7. <TextBox Text="{Binding Lastname, Mode=TwoWay}" Height="40" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"/>
    8. </DataTemplate>
    9. </DataGridTemplateColumn.CellTemplate>
    10. </DataGridTemplateColumn>
    11. </DataGrid.Columns>
    12. </DataGrid>


    Du legst für die Column ein DataTemplate fest. In diesem in eine TextBox in welcher AcceptReturn auf True steht sowie TextWrapping auf Wrap.

    Oder willst du was völlig anderes und wir verstehen dich total falsch.

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    r0tzi schrieb:

    ja ich möchte KEINE textbox.. ich möchte dass die ZELLEN

    Wie oben schon angesprochen. Was denkst du was in einer "Zelle" drinnen ist? Richtig, ein TextBlock bzw. beim editieren eine TextBox.

    Du musst eben zwischen dem CellTemplate und dem CellEditTemplate unterscheiden.


    Ansonsten weis ich wirklich nicht was genau du haben möchtest? Da musst du uns bitte auf die spünge Helfen. Hast du nen Screenshot oder etwas anderes was darstellt was genau du erreichen willst.

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    nein funktioniert immernoch nicht ... ich denke es liegt an der itemssource.. ich habe bei mir das <DatagridTextcolumn> nicht drin.. ich erstelle ja die spalten mit dem defaultview vom DT.. also automatisch.. deshab fügt er mir immernoch eine spalte ein die ich nicht haben möchte.
    Bilder
    • test.jpg

      14,4 kB, 188×339, 18 mal angesehen

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

    r0tzi schrieb:

    so aber nun geht mein defaultview nicht mehr, da er mir sagt, das die collection leer sein muss before using itemssource..

    Dann hast du unbewusst die ItemsSource festgelegt und gleichzeitig Content im DataGrid. Zeig mal bitte deinen aktuellen XAML.

    r0tzi schrieb:

    ganz einfach, wenn du das <DataGridTemplateColumn.CellEditingTemplate> baut er dir eine "zusätzliche" Textbox da rein, die aber mit dem Grid an sich oder dem Datatable natürlich nichts zu tun hat.

    ?( Sorry, den Satz verstehe ich nicht. Die View hat mit dem DataTable nichts zu tun. Richtig. Aber was für eine "zusätzliche" TextBox?

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    sorry ich bin immer zu schnell mit antworten, habs oben gezeigt... also nochmal langsam... ich habe ein DT und itemssource defaultview... das heisst, er erstellt die spalten automatisch.


    Quellcode

    1. <DataGrid x:Name="g1" Margin="139,57,9.6,10.4" SelectionUnit="CellOrRowHeader" CanUserReorderColumns="False" CanUserSortColumns="False" RowHeight="20" RowDetailsVisibilityMode="Visible" RowHeaderWidth="20" >
    2. <DataGrid.Columns>
    3. <DataGridTemplateColumn>
    4. <DataGridTemplateColumn.CellEditingTemplate>
    5. <DataTemplate>
    6. <TextBox AcceptsReturn="True" TextWrapping="WrapWithOverflow"/>
    7. </DataTemplate>
    8. </DataGridTemplateColumn.CellEditingTemplate>
    9. </DataGridTemplateColumn>
    10. </DataGrid.Columns>
    11. </DataGrid>


    so erstellt er mir eine texcolumn, dann kommt der DT dazu... das in der Textbox Spalte funktioniert super.. aber dann kann ich den DT nicht mehr einfach als itemssource festlegen :(

    r0tzi schrieb:

    das heisst, er erstellt die spalten automatisch.

    Dann setze einfach AutoGenerateColumns="False" wie auch in meinem Screenshot zu sehen ist.

    r0tzi schrieb:

    aber dann kann ich den DT nicht mehr einfach als itemssource festlegen

    Das ist aber wieder eine andere Sache. Wie ich in dem anderen Thread bereits geschrieben habe, habe ich (leider) keine Erfahrung mit DataTables und/oder Datasets da diese im Grunde in der WPF sehr selten verwendung finden. Ich zumindest verwende die NIE. Insofern kann ich dir diesbezüglich nicht helfen, aber normalerweise ist es egal wie oft und durch was die ItemsSource des Datagrids festgelegt wird, es hat nichts damit zu tun ob du nun die Columns selbst definierst oder automatisch generieren lässt. Das muss völlig egal sein.

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    wenn ich AutoGenerateColumns="False" setze, dann läd er den DT nicht mehr. Verdammt :( ... nunja, mann könnte es unter umständen auch programmtechnisch ohne XAML lösen .. indem man keys abfängt.. Quasi:

    Quellcode

    1. If e.key = enter then
    2. datatable.currentcell. text = datatable.currentcell.text % vbCrLf
    3. end if


    aber das is ned so leicht wies geschrieben is xD

    r0tzi schrieb:

    wenn ich AutoGenerateColumns="False" setze, dann läd er den DT nicht mehr.

    What?

    Jetzt haste aber meine Neugier geweckt.

    Hast du die möglichkeit ein Beispielprojekt hochzuladen? Das würde mich jetzt interessieren!

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    leider kann ich das nicht, ist von der firma^^...

    erstell schnell einen datatable mit

    Quellcode

    1. Public DT As New DataTable("dt")
    2. DT.Columns.Add("test1")
    3. DT.Columns.Add("test2")


    dann Datagrid auffe form und Datagrid.itemssource = DT.defaultview

    dann schreibste was da rein und machst anschliessend

    DT.WriteXml(System.AppDomain.CurrentDomain.BaseDirectory & "\text.xml")

    mit DT.ReadXml(System.AppDomain.CurrentDomain.BaseDirectory & "\text.xml")

    liesst du ihn wieder ein.

    geht ja flott

    dann kannste testen mit autogernerating und mit accepts enter :D
    Genau das ist ja der Punkt, irgendwas mache ich anders. Denn bei mir funzt es ja =O



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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    ja machst du, du lädst es nicht aus derXML :) ich hole das zeug ja aus SQL.. also einer datenbank.. kannst du es auch mit dem XML ding ma probiern? und kein Dataview.. nur datagrid.itemssource = dt.defaultview.

    habs schnell erstellt.. hier die herausforderung am morgen :D .. klick auf load, dann läd er es rein
    Dateien
    • WpfApp1.7z

      (170,79 kB, 9 mal heruntergeladen, zuletzt: )

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

    Hallo

    r0tzi schrieb:

    ja machst du, du lädst es nicht aus der XML

    Das macht keinen unterschied. Daten sind Daten, Anzeige ist anzeige. Die View zeigt nur die Daten an die sich im Objekt befinden.



    r0tzi schrieb:

    und kein Dataview.. nur datagrid.itemssource = dt.defaultview

    Ne - Die WPF ist auf Binding ausgelegt und ich poste hier ungern etwas "falsches". Aber ich kann dich beruigen - Es funktioniert trotzdem, ich habs probiert. Also auch wenn du die ItemsSource im Code setzt funktioniert es mit der XML. Also machst du was anderes falsch.

    Es ist zwar legitim das dieses Projekt von der Firma ist. Aber du kannst ja einfach ein kleines Testprojekt erstellen welches dein Problem nachstellt. Wenn du beim nachstellen des Problems den Fehler nicht automatisch findest (wovon ich ausgehe) dann kannst du es hier posten und ich schau mal drüber. Wie gesagt, dein Fehler liegt wo anders.

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Also bei allem Respekt - langsam frage ich mich ob du mich testen willst. Mich oder meine Geduld.

    Ich habe dein Beispiel genommen und NUR den XAML wie oben von mir gepostet abgeändert. Sonst NIX. Und funzt.
    Ich habe mich wirkich gerade im Raum umgesehen ob ich ne versteckte Kamera finde. Zur Sicherheit mal die Webcam schnell abgedeckt.

    Grüße
    Sascha
    Bilder
    • DataGrid.jpg

      158,36 kB, 1.244×734, 16 mal angesehen
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##