WPF verbinding database

Status
Niet open voor verdere reacties.

ferentuske

Gebruiker
Lid geworden
5 okt 2013
Berichten
78
Beste

ik zit met een probleem.

Ik heb dus een stopwatch gemaakt probleem is hoe ik de tijden in een database kan opslaan.
Hoe ik dus een connectionstring moet maken in een wpf

en hoe ik die tijden in een tabel kan krijgen.

Want zou eindelijk die tijden willen opslaan en dan later willen uitlezen in een datagrid.

Of is er nog iets beter om dit te doen bv JSON ofzo ?

alvast bedankt
 
Dit is mijn programma momenteel maar ja wanneer ik het programma sluit ben ik natuurlijk al mijn data kwijt.

Kan ik die data opslaan in een JSON bestand en dan terug uitlezen ?

Weet enkel niet hoe ik JSON moet toepassen


Code:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace StopKlok
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        DispatcherTimer dt = new DispatcherTimer();
        Stopwatch stopWatch = new Stopwatch();
        tijden tijdklasse = new tijden();
        string currentTime = string.Empty;

     
        public MainWindow()
        {
         
            InitializeComponent();
            dt.Tick += new EventHandler(dt_Tick);
            dt.Interval = new TimeSpan(0, 0, 0, 0, 1);
            ClockTextBlock.Text = "00:00:00.00";
        }

        void dt_Tick(object sender, EventArgs e)
        {
            if (stopWatch.IsRunning)
            {
                TimeSpan ts = stopWatch.Elapsed;
                currentTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                    ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
                ClockTextBlock.Text = currentTime;
           //     tijdklasse.tijd = currentTime;
               
            }
        }
        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            stopWatch.Start();
            dt.Start();
         
        }
        private void StopButton_Click(object sender, RoutedEventArgs e)
        {
          //  TimeElapsedItems.Items.Add(currentTime);
            if (stopWatch.IsRunning)
                stopWatch.Stop();
        }

        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            TimeElapsedItems.Items.Add(currentTime + "      " +  DateTime.Now.ToString());
        //    DTijd.Binding = new Binding("tijd");
            
            GrTijd.Items.Add(new tijden() {tijd = currentTime,Dag = DateTime.Now.ToString() });
          
            
            
           
        }

        private void ResetButton_Click(object sender, RoutedEventArgs e)
        {
            stopWatch.Reset();
            ClockTextBlock.Text = "00:00:00.00";
                   
          //  stopWatch.Start();
        }

        private void ResetLbBtn_Click(object sender, RoutedEventArgs e)
        {
           // TimeElapsedItems.Items.Clear();
            try
            {

                if (MessageBox.Show("Weet u zeker dat u de " + Environment.NewLine +  TimeElapsedItems.SelectedItem + Environment.NewLine + "wilt wissen  ?", "Wis", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    TimeElapsedItems.Items.RemoveAt(TimeElapsedItems.SelectedIndex);
                }
            }
            catch (Exception)
            {
             //   MessageBox.Show("test");
            }
            
        }
        //bool wisklik = false;
        private void BtnWis_Click(object sender, RoutedEventArgs e)
        {
        //    wisklik = true;
          
                if (MessageBox.Show("Weet u zeker dat u de listbox wilt wissen ?", "Wis", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    TimeElapsedItems.Items.Clear();
                }
            
        }
    }
}

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StopKlok
{
   public class tijden
    {
       public string tijd { get; set; }
       public string Dag { get; set; }
    }
}

Code:
<Window x:Class="StopKlok.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.3*"/>
            <RowDefinition Height="0.2*"/>
            <RowDefinition Height="0.5*"/>
        </Grid.RowDefinitions>
        <TextBlock Name="ClockTextBlock"
                TextAlignment="Center"
                VerticalAlignment="Center"
                FontSize="35" Foreground="Red"
                Grid.ColumnSpan="4"
                Grid.Row="0" />
        <Button Content="Start"
            Name="StartButton"
            Grid.Row="1"
            Grid.Column="0"
            Width="60" Height="35"
            Click="StartButton_Click" />
        <Button Content="Add"
            Name="AddButton"
            Grid.Row="1"
            Grid.Column="1"
            Width="60" Height="35"
            Click="AddButton_Click" />
        <Button Content="Stop"
            Name="StopButton"
            Grid.Row="1"
            Grid.Column="2"
            Width="60" Height="35"
            Click="StopButton_Click" />
        <Button Content="Reset"
            Name="ResetButton"
            Grid.Row="1"
            Grid.Column="3"
            Width="60" Height="35"
            Click="ResetButton_Click" />
        <ListBox Name="TimeElapsedItems"
                Margin="5" Width="150"
                Grid.Row="2"
                Grid.ColumnSpan="4" />
        <Button Content="Reset"
        	Name="resetLbBtn"
        	Grid.Row="2"
        	Grid.Column="2" Height="35"
        	Click="ResetLbBtn_Click" Margin="80,115,0,10" RenderTransformOrigin="0.52,1.943" />
        <DataGrid  x:Name="GrTijd" AutoGenerateColumns="False" Margin="10" Grid.Row="2">
            <DataGrid.Columns>

                <DataGridTextColumn x:Name="DTijd" Binding="{Binding Path=tijd}" Header="Tijd" />

                <DataGridTextColumn Header="dag" Binding="{Binding Path=Dag}"></DataGridTextColumn>

            </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="BtnWis" Content="Wis" Grid.Column="2" HorizontalAlignment="Left" Margin="80,85,0,0" Grid.Row="2" VerticalAlignment="Top" Width="52" Height="25" Grid.ColumnSpan="2" Click="BtnWis_Click"/>

    </Grid>
</Window>
 
Je kunt objecten bijvoorbeeld in json omzetten met behulp van de Newtonsoft.Json dll

Installeren kun je eenvoudig doen met nuget packages (zie afbeelding)
vhsqko.png


Zoek even op 'json', maar 'Newtonsoft.Json' staat waarschijnlijk al bijna bovenaan in het lijstje.

Klik op installeren en voila, je kunt aan de slag met json.




Om een lijst met tijden op te slaan moet je deze eerst maken, je kun in je code dit toevoegen:

[CPP]private const string JsonFileName = "times.json";

private List<tijden> _times;

private void Save()
{
var json = JsonConvert.SerializeObject(_times,Formatting.Indented);

using (var writer = new StreamWriter(JsonFileName))
{
writer.Write(json);
}
}

private void Load()
{
if (File.Exists(JsonFileName))
{
using (var reader = new StreamReader(JsonFileName))
{
var json = reader.ReadToEnd();
_times = JsonConvert.DeserializeObject<List<tijden>>(json);
}
}
else
{
_times = new List<tijden>();
}
}[/CPP]

In je kunt na je InitializeComponent(); bijvoorbeeld de Load(); method aanroepen om data te laden als deze aanwezig is. En als je het Window sluit de Save(); method aanroepen om de lijst op te slaan.


Let wel: je moet in je Add method wel de tijden aan _times toevoegen.


Je bestandje zal er ongeveer zo uitzien:
Code:
[
  {
    "tijd": "00:00:00.56",
    "Dag": "7-10-2014 14:33:57"
  },
  {
    "tijd": "00:00:04.32",
    "Dag": "7-10-2014 14:34:00"
  },
  {
    "tijd": "00:00:05.64",
    "Dag": "7-10-2014 14:34:02"
  },
  {
    "tijd": "00:00:06.67",
    "Dag": "7-10-2014 14:34:03"
  },
  {
    "tijd": "00:00:07.98",
    "Dag": "7-10-2014 14:34:05"
  }
]
 
Heb het zo gedaan maar dit werkt nog niet.

Ik vind ook het JSON bestand niet terug.
Als ik debugger laat lopen blijft _times ook null

Ja mijn kennis van JSON is momenteel maar 1%.
Ik weet enkel hoe een JSON bestand eruit ziet maar hoe ik het in de code moet toepassen weet ik nog niet

moet er nog ergens code bijgesvchreven worden ?


Code:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace StopKlok
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        DispatcherTimer dt = new DispatcherTimer();
        Stopwatch stopWatch = new Stopwatch();
        tijden tijdklasse = new tijden();
        string currentTime = string.Empty;

     
        public MainWindow()
        {
         
            InitializeComponent();
            dt.Tick += new EventHandler(dt_Tick);
            dt.Interval = new TimeSpan(0, 0, 0, 0, 1);
            ClockTextBlock.Text = "00:00:00.00";
            Load();
        }

        private const string JsonFileName = "times.json";

        private List<tijden> _times;

        private void Save()
        {
            var json = JsonConvert.SerializeObject(_times, Formatting.Indented);

            using (var writer = new StreamWriter(JsonFileName))
            {
                writer.Write(json);
            }
        }

        private void Load()
        {
            if (File.Exists(JsonFileName))
            {
                using (var reader = new StreamReader(JsonFileName))
                {
                    var json = reader.ReadToEnd();
                    _times = JsonConvert.DeserializeObject<List<tijden>>(json);
                }
            }
            else
            {
                _times = new List<tijden>();
            }
        }

        void dt_Tick(object sender, EventArgs e)
        {
            if (stopWatch.IsRunning)
            {
                TimeSpan ts = stopWatch.Elapsed;
                currentTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                    ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
                ClockTextBlock.Text = currentTime;
           //     tijdklasse.tijd = currentTime;
               
            }
        }
        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            stopWatch.Start();
            dt.Start();
         
        }
        private void StopButton_Click(object sender, RoutedEventArgs e)
        {
          //  TimeElapsedItems.Items.Add(currentTime);
            if (stopWatch.IsRunning)
                stopWatch.Stop();
        }

        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            TimeElapsedItems.Items.Add(currentTime + "      " +  DateTime.Now.ToString());
        //    DTijd.Binding = new Binding("tijd");
            
            GrTijd.Items.Add(new tijden() {tijd = currentTime,Dag = DateTime.Now.ToString() });

            Save();
            
           
        }

        private void ResetButton_Click(object sender, RoutedEventArgs e)
        {
            stopWatch.Reset();
            ClockTextBlock.Text = "00:00:00.00";
                   
          //  stopWatch.Start();
        }

        private void ResetLbBtn_Click(object sender, RoutedEventArgs e)
        {
           // TimeElapsedItems.Items.Clear();
            try
            {

                if (MessageBox.Show("Weet u zeker dat u de " + Environment.NewLine +  TimeElapsedItems.SelectedItem + Environment.NewLine + "wilt wissen  ?", "Wis", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    TimeElapsedItems.Items.RemoveAt(TimeElapsedItems.SelectedIndex);
                }
            }
            catch (Exception)
            {
             //   MessageBox.Show("test");
            }
            
        }
        //bool wisklik = false;
        private void BtnWis_Click(object sender, RoutedEventArgs e)
        {
        //    wisklik = true;
          
                if (MessageBox.Show("Weet u zeker dat u de listbox wilt wissen ?", "Wis", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    TimeElapsedItems.Items.Clear();
                }
            
        }


    }
}
 
Waar je nu de Save(); method gebruikt moet je een tijd toevoegen aan de _times lijst (zoals je dat bij de listview doet)

b.v.
[CPP]_times.Add(new tijden() { tijd = currentTime, Dag = DateTime.Now.ToString() });[/CPP]

Je zou daarna meteen save kunnen aanroepen, of als het programma sluit.


Je json bestand zal in je debug output folder staan (waar je .exe staat)
 
bedankt voor het antwoord maar als ik dus die _items.add gebruik wnr ik op mijn add button druk dan vlieg ik uit mijn programma nullreferenceexception
ja wnr ik try gebruik gebeurt er natuurlijk helemaal niks.
 
Verwijder even de json file en start het opnieuw, kan zijn dat het mis is gegaan bij het opslaan van de lege lijst bij de vorige debug run.

In principe wordt het in de Load() al gedaan tenzij je een lijst met laad. Je kunt ook de Load wijzigen in:

[CPP]private void Load()
{
if (File.Exists(JsonFileName))
{
using (var reader = new StreamReader(JsonFileName))
{
var json = reader.ReadToEnd();
_times = JsonConvert.DeserializeObject<List<tijden>>(json);
}
}

if (_times == null)
_times = new List<tijden>();
}[/CPP]
 
ja idd was een fout nu werkt hij en met een for lus heb ik ze allemaal kunnen uitlezen (load)

Hartelijk bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan