GridView / Vorschau des gebundenen DataTables?

  • WPF
  • .NET (FX) 4.5–4.8

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

    GridView / Vorschau des gebundenen DataTables?

    Hallo!

    Ist es möglich, wenn ich ein typisiertes DataTable an eine DataGrid binde, mir die Columns während des Codings anzeigen lassen kann?

    Ich kenne das vom DataGridView so das wenn ich als DataSource ein DataTable angebe ich auch schon die Columns der Table sehen kann, das scheint bei WPF garnicht zu gehen, oder?
    (Außer ich deklariere sie vorher in XML, das möchte ich aber nicht)

    Gibts da vllt. ein bestimmtes Binding mit Pfad etc. das ich eine Vorschau der Columns erhalte?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hm … ok, klappt nicht mehr. Ich krieg noch nicht mal das tDS eingebunden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo

    Ist in der Welt der WPF so auch nicht vorgesehen. In WPF wird mit ViewModels gearbeitet.
    Wenn du uns Details lieferst kann ich dir gerne mehr Helfen.

    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. ##

    Hi!

    Ja, ich hab eine riesen DataTable in meiner .xsd Datei. Diese möchte ich nun auf meine Form bringen, sodass ich die Spalten während des codings sehen kann, weil ich die einzelnen Spalten individuell gestalten möchte.
    Die einzelnen Spalten bestehen aus Strings, Numerics, Dates, Booleans und Lists..
    Nun möchte ich nicht für jede Spalte ein Template schreiben oder in XML ausformulieren, weil ich dachte das dies im Designer besser zu lösen ist..bekomme aber meine Spalten nicht angezeigt..
    Bilder
    • Tabelle.JPG

      92,19 kB, 499×1.055, 54 mal angesehen
    • WPF.JPG

      45,35 kB, 846×498, 59 mal angesehen
    Hallo

    Ich weis ja nicht in wie weit du meiner WPF Tutorialreihe bereits angesehen hast aber WPF hat mit WinForms so viel zu tun wie die Grünen mit Hausverstand. ;)
    Du tust dir selbst einen gefallen wenn du deine Table als ViewModel abbildest (geht ja schnell) und dieses ViewModel verwendest (Binding!!)

    Je früher du anfängst mit Binding (komplett ohne CodeBehind) zu arbeiten desto früher wird dir die WPF auch spass machen.

    Erstelle eine Klasse und erstelle die Properties wie in deiner Tabelle zu sehen. (inkl. INotifyPropertyChanged)
    Diese ViewModel-Klasse kannst du dann auch als Designtime-DataContext angeben um zur Designzeit auch alles sehen und steuern zu können.

    Details kannst du gerne aus meinen Tutorials entnehmen und wenn du Fragen hast frag bitte gerne nach.

    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. ##

    Hi!

    Ich hab jetzt im

    XML-Quellcode

    1. <Window>

    XML-Quellcode

    1. d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=local:View_BaseModel}"
    hinzugefügt.
    Dann hab ich des Grid so zugewiesen:

    XML-Quellcode

    1. <DataGrid x:Name="dgData" Grid.Column="4" Grid.Row="2"
    2. ItemsSource="{Binding Data_BaseModel}">
    3. </DataGrid>


    Meine "View_BaseModel" sieht jetzt so aus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Collections.ObjectModel
    2. Imports System.ComponentModel
    3. Imports System.Data
    4. Imports System.Runtime.CompilerServices
    5. Public MustInherit Class View_BaseModel
    6. Implements INotifyPropertyChanged
    7. Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    8. Public Overridable Sub RaisePropertyChanged(<CallerMemberName> Optional prop As String = "")
    9. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(prop))
    10. End Sub
    11. Private _isBusy As Boolean
    12. Public Property IsBusy() As Boolean
    13. Get
    14. Return _isBusy
    15. End Get
    16. Set(value As Boolean)
    17. _isBusy = value
    18. RaisePropertyChanged()
    19. End Set
    20. End Property
    21. Public Property BaseModel As ObservableCollection(Of Data_BaseModel)
    22. Public Sub New()
    23. BaseModel = New ObservableCollection(Of Data_BaseModel)()
    24. End Sub
    25. 'Private _dataView As DataView
    26. 'Public Property DataView As DataView
    27. ' Get
    28. ' Return _dataView
    29. ' End Get
    30. ' Set(ByVal value As DataView)
    31. ' If _dataView = value Then Return
    32. ' _dataView = value
    33. ' RaisePropertyChanged("DataView")
    34. ' End Set
    35. 'End Property
    36. Protected Function SetProperty(Of T)(ByRef field As T, newValue As T, <CallerMemberName> Optional propertyName As String = Nothing) As Boolean
    37. If Not Equals(field, newValue) Then
    38. field = newValue
    39. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    40. Return True
    41. End If
    42. Return False
    43. End Function
    44. Private _data_BaseModel As IEnumerable
    45. Public Property Data_BaseModel As IEnumerable
    46. Get
    47. Return _data_BaseModel
    48. End Get
    49. Set(value As IEnumerable)
    50. SetProperty(_data_BaseModel, value)
    51. End Set
    52. End Property
    53. End Class


    Bekomme aber keine Vorschau, sondern folgenden Hinweis: "Es kann keine abstrakte Klasse erstellt werden"
    Ist doch ziemlich eindeutig. Der Designer ruft implizit den parameterlosen Konstruktor der Klasse auf, um an sie zu binden und den DesignTimeSupport "anzubieten". Was bei einer MustInherit-Klasse natürlich nicht geht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    OK, Die Klasse ist deine Basisklasse und wie der Name sagt sollte diese die Basis für andere Bilder, weshalb Sie Abstract ist.
    Wie @VaporiZed ja schon geschrieben hat kann diese nicht instaziiert werden.

    Du mast dir also eine ViewModel-Klasse (wenn das ​Data_BaseModel in der BAsisklasse bleiben soll (weshalb auch immer) dann von mir aus eine leere Klasse) welche von deiner Basisklasse erbt und genau diese Klasse gibst du als DataContext für die Designzeit an. Fertich.

    Grüße
    Sascha

    PS: Den Datentyp von ​Data_BaseModel kann ich nicht folgen. IEnumerable of Whats? Birnen, Äpfel.
    Und dann eine Observable of IEnumerable. Eine Liste in einer Liste? Ist das so gewollt?
    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. ##

    Geht nich.. ||

    Hab jetzt:

    XML-Quellcode

    1. ​<DataGrid x:Name="dgData" Grid.Column="4" Grid.Row="2"
    2. d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type={x:Type local:View_BaseModel}}"
    3. ItemsSource="{Binding Data_BaseModel}">
    4. </DataGrid>

    Da kommt kein Fehler..aber er zeigt mir auch keine Vorschau an!

    Hab das "MustInherit" rausgenommen.
    Die "Data_BaseModel"-Klasse sieht so aus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Data_BaseModel
    2. Public Property CreationTime As DateTime
    3. Public Property DirectoryName As String
    4. Public Property Extension As String
    5. Public Property FullName As String
    6. Public Property IsReadOnly As Boolean
    7. Public Property LastAccessTime As DateTime
    8. Public Property LastWriteTime As DateTime
    9. Public Property Length As ULong
    10. Public Property Name As String
    11. Public Property AudioBitrate As Integer
    12. Public Property AudioChannels As Integer
    13. Public Property AudioSampleRate As Integer
    14. Public Property BitsPerSample As Integer
    15. Public Property Codecs As IEnumerable(Of TagLib.ICodec)
    16. Public Property Description As String
    17. Public Property DurationTicks As TimeSpan
    18. Public Property Title As String
    19. Public Property Album As String
    20. Public Property AlbumArtists As String()
    21. Public Property Track As UInteger
    22. Public Property TrackCount As UInteger
    23. Public Property Genres As String()
    24. Public Property Year As UInteger
    25. Public Property Comment As String
    26. Public Property BeatsPerMinute As UInteger
    27. Public Property Conductor As String
    28. Public Property Copyright As String
    29. Public Property RemixedBy As String
    30. Public Property Publisher As String
    31. Public Property ISRC As String
    32. Public Property Disc As UInteger
    33. Public Property Lyrics As String
    34. Public Property Pictures As TagLib.IPicture
    35. Public Property InitialKey As String
    36. Public Property ReplayGainTrackGain As Double
    37. Public Property ReplayGainTrackPeak As Double
    38. Public Property ReplayGainAlbumGain As Double
    39. Public Property ReplayGainAlbumPeak As Double
    40. Public Property DateTagged As Date
    41. Public Property AcoustidFingerprint As String
    42. Public Property MusicBrainzArtistId As String
    43. Public Property MusicBrainzReleaseGroupId As String
    44. Public Property MusicBrainzReleaseId As String
    45. Public Property MusicBrainzReleaseArtistId As String
    46. Public Property MusicBrainzTrackId As String
    47. Public Property MusicBrainzDiscId As String
    48. Public Property MusicBrainzReleaseStatus As String
    49. Public Property MusicBrainzReleaseType As String
    50. Public Property MusicBrainzReleaseCountry As String
    51. Public Property MusicIpId As String
    52. Public Property AmazonId As String
    53. End Class
    Hallo

    du gibst ja immernoch local:View_BaseModel als Type an.

    Sag, willste meine Tutorials nicht ansehen? Da wird das ganz genau erklärt.

    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. ##

    Naja, mal das Inhaltsverzeichnis ansehen.
    2.1.4.3 würde ganz gut passen wenns dort um Binding zu Designtime geht würde ich sagen.

    Sollten dann noch Fragen offen sein können wir die gerne durchgehen.

    Grüße
    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. ##

    OK, hab jetzt folgendes zu meiner "Data_BaseModel" hinzugefügt:

    VB.NET-Quellcode

    1. Public Property BaseModel As ObservableCollection(Of Data_BaseModel)
    2. Public Sub New()
    3. BaseModel = New ObservableCollection(Of Data_BaseModel)
    4. End Sub


    In XML steht nun:

    XML-Quellcode

    1. <DataGrid x:Name="dgData" Grid.Column="4" Grid.Row="2"
    2. d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=local:Data_BaseModel}"
    3. ItemsSource="{Binding BaseModel}">
    4. </DataGrid>


    ..und jetzt funktionierts auch!
    Dankeschön! ;)

    Hmm, kakke..aber das erhoffte konfigurieren der Columns geht immer noch nicht!

    Wie kann ich denn jetzt die Columns-Eigenschaften anpassen? Wie z.B.: TextFormat, TextAlign etc.??
    Naja, ich sehe ja jetzt keine Columns im DataGrid definiert.
    Du arbeitest im Moment ja mit den automatisch generierten Columns.
    Musste hald Columns erstellen.

    wpf-tutorial.com/datagrid-control/custom-columns/

    Du solltest dich mit XAML befassen aus. Sorry, aber ich muss es nochmals sagen. WPF ist nicht WinForms.
    Befasse dich damit, lerne es und suche auch mal im Netz.

    Und die Tutorialreihe habe ich nun eben auch nicht nur zwecks spaß geschrieben.
    Auch dieses Thema wird darin behandelt. Was soll ich sagen.

    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. ##