Daten speichern in UWP App

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von matthias40.

    Daten speichern in UWP App

    Hi alle zusammen!

    Ich bin relativ neu in UWP Programmierung und VB.Net, also bitte nicht über meine blöde Frage wundern...

    Ich habe ein ViewModel erstellt, kann meinen Datensatz auch anzeigen, aber wie speichere ich jetzt die Daten wenn ich was ändere? Ebenso würde ich gerne wissen wie ich es schaffe einen neuen Datensatz anzulegen.

    Hier der Code von meinem ViewModel:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Imports System.Data.SqlClient
    3. Imports Windows.UI.Popups
    4. Public Class MitarbeiterViewModel
    5. Implements INotifyPropertyChanged
    6. Private myConn As SqlConnection
    7. Private myCmd As SqlCommand
    8. Private _MitarbeiterListe As List(Of ModelMitarbeiter)
    9. Private ReadOnly _MyCommand As ICommand
    10. Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    11. Public Property MitarbeiterListe As List(Of ModelMitarbeiter)
    12. Get
    13. Return _MitarbeiterListe
    14. End Get
    15. Set
    16. _MitarbeiterListe = Value
    17. NotifyPropertyChanged("MitarbeiterListe")
    18. End Set
    19. End Property
    20. Private Sub NotifyPropertyChanged(ByVal info As String)
    21. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    22. End Sub
    23. Public Sub GetMitarbeiter()
    24. Dim MyMitarbeiter As New List(Of ModelMitarbeiter)
    25. myConn = GetConnection()
    26. myCmd = myConn.CreateCommand
    27. myCmd.CommandText = "SELECT * FROM tblMitarbeiter"
    28. myConn.Open()
    29. Dim rdr As SqlDataReader = myCmd.ExecuteReader
    30. Try
    31. While rdr.Read()
    32. If rdr.HasRows() Then
    33. Dim M As New ModelMitarbeiter With {.Anrede = rdr("strAnrede"), .VName = rdr("strVName"), .NName = rdr("strNName"), .Strasse = rdr("strStrasse"), .PLZ = rdr("intPLZ"), .Ort = rdr("strOrt"), .SV = rdr("intSV"),
    34. .GebDat = rdr("dtGebDat"), .TelNr = rdr("strTelNr"), .Handy = rdr("strHandy"), .Email = rdr("strEmail"), .PersonalNr = rdr("intPersonalNr"), .BIC = rdr("strBIC"), .IBAN = rdr("strIBAN"),
    35. .Kontoinhaber = rdr("strKontoinhaber"), .Bemerkungen = rdr("strBemerkungen"), .PersNrBarCode = rdr("strPersNrBarCode"), .SollStunden = rdr("intSollStunden"), .SollUrl = rdr("intSollUrl")}
    36. MyMitarbeiter.Add(M)
    37. End If
    38. End While
    39. MitarbeiterListe = MyMitarbeiter
    40. Catch ex As Exception
    41. Return
    42. End Try
    43. End Sub
    44. Public Sub New()
    45. GetMitarbeiter()
    46. End Sub


    Ich hoffe ihr könnt mir helfen. Danke im Voraus
    Hallo und Willkommen

    Naja, mit SELECT .... rufst du Daten ab.
    Mit z.b.

    SQL-Abfrage

    1. ​UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;

    kannst du Daten aktualisieren (zurückspeichern)
    Mit

    SQL-Abfrage

    1. ​INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);

    kannst du einen neuen Datensatz erstellen.

    Schau mal hier vorbei.

    BTW: Lass bitte tunlichst die Finger von sowas:

    VB.NET-Quellcode

    1. End While
    2. MitarbeiterListe = MyMitarbeiter
    3. Catch ex As Exception
    4. Return
    5. End Try


    Du verschluckst damit ALLE Fehler. Glaub mir, das willst du nicht.
    Überlege dir genau was du machst wenn ein Fehler auftritt und Zeige diesen evtl. dem User auch an damit man im ernstfall zumindest eine Fehlermeldung hat.

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

    Danke für deine Antwort. Ich habe mich nicht richtig ausgedrückt. Das mit den Update und Insert Statements war mir klar, was ich eigentlich wissen wollte ist, ob ich mir beim Speichern die Daten aus allen Feldern holen muss oder ob die mit dem PropertyChanged in meiner Liste aktualisiert werden und ich nur die Liste in meinem Update-Statement verwenden kann und wie das funktioniert. Sorry für meine eventuell schwammige Formulierung aber dieses UWP Zeugs treibt mich in den Wahnsinn.
    Das mit dem Return im Catch-Teil war nur vorübergehend, an der Routine für die Fehlerbehandlung arbeite ich nebenbei. :)
    Das kann ich dir nicht sagen. Du zeigst ja keinen XAML. Wie sollen wir wissen ob du korrekt gebunden hast. Wenn dem so ist dann ja.
    Setze doch einen Haltepunkt beim Debuggen und schau welche wert du bekommst.
    Das hättest du so in 10 Sekunden herausgefunden. Immer meine Devise. Einfach mal probieren, da erfährt man bei Debuggen sooooo viel.

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

    Soo, hier mal Xaml:

    XML-Quellcode

    1. <Page
    2. x:Class="ASF_OfficeSuite.PageMitarbeiterverwaltung"
    3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    5. xmlns:local="using:ASF_OfficeSuite"
    6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    8. xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
    9. mc:Ignorable="d"
    10. Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    11. <Grid ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollMode="Auto" ScrollViewer.HorizontalScrollMode="Auto">
    12. <Pivot Background="{ThemeResource SystemControlAccentAcrylicWindowAccentMediumHighBrush}" >
    13. <Pivot.TitleTemplate>
    14. <DataTemplate>
    15. <Grid>
    16. <TextBlock Text="Mitarbeiterverwaltung" Style="{ThemeResource HeaderTextBlockStyle}" FontSize="30"/>
    17. </Grid>
    18. </DataTemplate>
    19. </Pivot.TitleTemplate>
    20. <PivotItem >
    21. <Grid >
    22. <CommandBar x:Name="cmdBarMA" OverflowButtonVisibility="Collapsed" Background="Transparent" HorizontalAlignment="Right">
    23. <AppBarButton Icon="Add" Click="btnAddMA_Click"/>
    24. <AppBarSeparator/>
    25. <AppBarButton Icon="Save" Click="btnSaveMA_Click"/>
    26. <AppBarSeparator/>
    27. <AppBarButton Icon="Edit" Click="btnEditMA_Click" />
    28. <AppBarSeparator/>
    29. <AppBarButton Icon="Delete" Click="btnDelMA_Click"/>
    30. </CommandBar>
    31. <ComboBox x:Name="cmbData" Header="Mitarbeiter auswählen" Width="200" Height="70" Margin="10,0,0,0" Background="LightGray" ItemsSource="{Binding MitarbeiterListe, Mode=TwoWay}">
    32. <ComboBox.ItemTemplate>
    33. <DataTemplate>
    34. <StackPanel Orientation="Horizontal">
    35. <TextBlock x:Name="t1" Margin="5" Text="{Binding VName, Mode=TwoWay}" />
    36. <TextBlock x:Name="t2" Margin="5" Text="{Binding NName, Mode=TwoWay}" />
    37. </StackPanel>
    38. </DataTemplate>
    39. </ComboBox.ItemTemplate>
    40. </ComboBox>
    41. <RelativePanel Margin="0,70,0,0" Background="Transparent" >
    42. <StackPanel x:Name="stMitarbeiter" Margin="20,0,0,0">
    43. <TextBox x:Name="tPersNr" Header="Personalnummer" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="Number" />
    44. <TextBox x:Name="tVorname" Header= "Vorname" Margin="0,24,0,0" MaxLength="180" Width="400" HorizontalAlignment="Left" />
    45. <TextBox x:Name="tNachname" Header="Nachname" Margin="0,24,0,0" MaxLength="180" Width="400" HorizontalAlignment="Left" />
    46. <TextBox x:Name="tStrasse" Header="Strasse" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left"/>
    47. <RelativePanel>
    48. <TextBox x:Name="tPLZ" Header="Postleitzahl" Margin="0,24,0,0" MaxLength="5" Width="100" HorizontalAlignment="Left" InputScope="Number" />
    49. <TextBox x:Name="tOrt" Header="Ort" Margin="120,24,0,0" MaxLength="50" Width="280" HorizontalAlignment="Left" />
    50. </RelativePanel>
    51. <RelativePanel>
    52. <TextBox x:Name="tSV" Header="SV-Nummer" Margin="0,24,0,0" MaxLength="4" Width="100" HorizontalAlignment="Left" InputScope="Number" />
    53. </RelativePanel>
    54. <RelativePanel>
    55. <DatePicker x:Name="GebDat" Header="Geburtsdatum" HorizontalAlignment="Left" Margin="0,30,0,0"></DatePicker>
    56. </RelativePanel>
    57. </StackPanel>
    58. <StackPanel x:Name="stMitarbeiter2" Margin="20,0,0,0" RelativePanel.RightOf="stMitarbeiter">
    59. <TextBox x:Name="tTelefon" Header="Telefon" Margin="0,24,0,0" MaxLength="150" Width="400" HorizontalAlignment="Left" />
    60. <TextBox x:Name="tHandy" Header="Mobil" Margin="0,24,0,0" MaxLength="150" Width="400" HorizontalAlignment="Left" />
    61. <TextBox x:Name="tEMail" Header="E-Mail" Margin="0,24,0,0" MaxLength="150" Width="400" HorizontalAlignment="Left" />
    62. <TextBox x:Name="tIBAN" Header= "IBAN" Margin="0,24,0,0" MaxLength="320" Width="400" HorizontalAlignment="Left" />
    63. <TextBox x:Name="tBIC" Header="BIC" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="Number"/>
    64. <TextBox x:Name="tInhaber" Header="Kontoinhaber" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left"/>
    65. </StackPanel>
    66. <StackPanel x:Name="stMitarbeiter3" Margin="50,0,0,0" RelativePanel.RightOf="stMitarbeiter2">
    67. <Button x:Name="btnAddDoc" Margin="0,44,0,0" Width="180" Content="Dokument hinzufügen" Click="btnAddDoc_Click"></Button>
    68. <Button x:Name="btnGetAbwesenheit" Margin="0,24,0,0" Width="180" Content="Abwesenheit erfassen" Click="btnGetAbwesenheit_Click"></Button>
    69. <Button x:Name="btnShowAbwesenheit" Margin="0,24,0,0" Width="180" Content="Abwesenheiten anzeigen" Click="btnShowAbwesenheit_Click"></Button>
    70. <Button x:Name="btnGetZeitkonto" Margin="0,24,0,0" Width="180" Content="Zeitkonto anzeigen" Click="btnGetZeitkonto_Click"></Button>
    71. <Button x:Name="btnGetDokument" Margin="0,24,0,0" Width="180" Content="Dokument anzeigen" Click="btnGetDokument_Click"></Button>
    72. </StackPanel>
    73. </RelativePanel>
    74. </Grid>
    75. </PivotItem>
    76. </Pivot>
    77. </Grid>
    78. </Page>


    und hier der Code dahinter:

    VB.NET-Quellcode

    1. ​Imports System.ComponentModel
    2. Imports Windows.UI.Popups
    3. Imports Windows.UI.WindowManagement
    4. Imports Windows.UI.Xaml.Hosting
    5. Public NotInheritable Class PageMitarbeiterverwaltung
    6. Inherits Page
    7. Private Shared MitarbeiterViewModels As New MitarbeiterViewModel
    8. Public Sub New()
    9. InitializeComponent()
    10. Me.DataContext = MitarbeiterViewModels
    11. End Sub
    12. Private Sub cmbData_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles cmbData.SelectionChanged
    13. Dim mySelMitarbeiter As ModelMitarbeiter = cmbData.SelectedItem
    14. tPersNr.Text = mySelMitarbeiter.PersonalNr
    15. tVorname.Text = mySelMitarbeiter.VName
    16. tNachname.Text = mySelMitarbeiter.NName
    17. tStrasse.Text = mySelMitarbeiter.Strasse
    18. tPLZ.Text = mySelMitarbeiter.PLZ
    19. tOrt.Text = mySelMitarbeiter.Ort
    20. tSV.Text = mySelMitarbeiter.SV
    21. tTelefon.Text = mySelMitarbeiter.TelNr
    22. tHandy.Text = mySelMitarbeiter.Handy
    23. tEMail.Text = mySelMitarbeiter.Email
    24. tIBAN.Text = mySelMitarbeiter.IBAN
    25. tBIC.Text = mySelMitarbeiter.BIC
    26. tInhaber.Text = mySelMitarbeiter.Kontoinhaber
    27. GebDat.Date = mySelMitarbeiter.GebDat
    28. End Sub
    29. End Class


    Irgendwie hab ich den Verdacht das ich das mit dem NotifyPropertyChanged verhauen hab, was anderes könnt ich mir nicht vorstellen. Macht es eigentlich mehr Sinn, die Felder alle im XAML zu binden? und falls ja, wie bekomm ich dann nach Auswahl in der ComboBox die Daten in die jeweiligen Felder? Habs mal im Code gelöst weil ich nicht gewusst habe wie es sonst funktioniert.

    Danke schon mal,
    LG
    Hallo

    Ok, da fehlen die Grundlagen.
    Schau mal in meine Signatur und nimm dir mal einiges zur Brust.
    Insbesonders Kapitel wie Binding, Command, DataTemplates und sowas.

    UWP ist an einigen Stellen ein wenig anders, aber der Großteil ist so übertragbar.

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