IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Phone .NET Discussion :

Insertion BD Sqlite avec valeur TextBox


Sujet :

Windows Phone .NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Insertion BD Sqlite avec valeur TextBox
    Bonjour à tous

    Je viens vous demander un peu d'aide pour insérer des éléments dans une base de donnée Sqlite.

    J'ai réalisé mon projet avec MVVM Lite donc j'ai donc ma MainPage.xaml ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <Page
        x:Class="Dictionary.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Dictionary"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
     
        <Grid DataContext="{Binding Source={StaticResource Locator}, Path=Main}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
     
            <StackPanel>
                <TextBlock x:Name="Title" Text="Wiktionnary" FontSize="48" HorizontalAlignment="Center"></TextBlock>
                <TextBox HorizontalAlignment="Center" Margin="45,30,45,0" Width="311"/>
                <Button x:Name="Button_Add" Margin="44,90,45,0" HorizontalAlignment="Center" Width="311" Height="89" Content="Ajouter une définition" Click="Click1"></Button>
                <Button x:Name="Button_List" HorizontalAlignment="Center" Margin="44,0,45,0" Height="89" Width="311" Content="Liste des définitions" Click="Click2"></Button>
     
            </StackPanel>
     
     
     
     
        </Grid>
    </Page>
    ensuite de cette MainPage on va vers l'ajout d'une définition avec la page AddDefinition.xaml :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <Page
        x:Class="Dictionary.AddDefinition"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Dictionary"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
     
        <Grid DataContext="{Binding Source={StaticResource Locator}, Path=Main}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
            <StackPanel>
                <TextBlock Text="Nom :" FontSize="24" HorizontalAlignment="Left" Margin="20,50,0,0"></TextBlock>
                <TextBox x:Name="TextBox_Name" Margin="20,0,40,0" />
                <TextBlock Text="Définition :" FontSize="24" Margin="20,40,0,0"></TextBlock>
                <TextBox x:Name="TextBox_Def" Margin="20,0" Height="300"/>
                <Button Command="{Binding SaveWord}" Content="Save" Margin="0,90,0,0" HorizontalAlignment="Center"></Button>
     
     
            </StackPanel>
            <TextBlock Text="{Binding Name}" FontSize="48" Margin="0,0,0,70"></TextBlock>
     
        </Grid>
    </Page>
    c'est de cette page que je veux récupérer le contenu des deux TextBox et l'insérer dans la base de donnée Sqlite

    Comme j'utilise MVVM Lite j'ai tout dans le MainViewModel.cs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Input;
    using GalaSoft.MvvmLight;
    using GalaSoft.MvvmLight.Command;
    using SQLite;
    using Dictionary.Model;
     
    namespace Dictionary.ViewModel
    {
        /// <summary>
        /// This class contains properties that the main View can data bind to.
        /// <para>
        /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
        /// </para>
        /// <para>
        /// You can also use Blend to data bind with the tool's support.
        /// </para>
        /// <para>
        /// See http://www.galasoft.ch/mvvm
        /// </para>
        /// </summary>
        public class MainViewModel : ViewModelBase
        {
            // L'attribut qui nous permettra de communiquer avec la base de données
            private SQLiteAsyncConnection _connexion;
     
            // Propriété bindable, pour afficher la liste des cartes de crédit sur l'interface
            private ObservableCollection<Word> _word;
            public ObservableCollection<Word> Word
            {
                get { return _word; }
                set
                {
                    _word = value;
                    RaisePropertyChanged(() => Word);
                }
            }
     
     
     
            /// <summary>
            /// Initializes a new instance of the MainViewModel class.
            /// </summary>
            public MainViewModel()
            {
                // Création de l'objet
                _connexion = new SQLiteAsyncConnection("mybase.db");
     
     
                InitializeDb();
            }
     
            /// <summary>
            /// Supprime une carte de la base SQLite
            /// </summary>
            /// <param name="obj"></param>
     
            async void InitializeDb()
            {
                // TODO : encapsuler les appels à Sqlite dans un try catch
                await _connexion.CreateTableAsync<Word>();
     
                // Insertion de données arbitraires
                await InsertDatas();
     
                // Récupération de toutes les données dans la base pour les insérer dans la collection bindée
                IEnumerable<Word> words = await GetDatas();
                Word = new ObservableCollection<Word>(words);
            }
     
            /// <summary>
            /// Récupère l'ensemble des cartes de crédit de la base SQLite
            /// </summary>
            /// <returns></returns>
            private async Task<IEnumerable<Word>> GetDatas()
            {
                return await _connexion.Table<Word>().ToListAsync();
            }
     
            /// <summary>
            /// Insert des données arbitraires dans la base de données SQLite
            /// </summary>
            /// <returns></returns>
            private async Task InsertDatas()
            {
                await _connexion.InsertAllAsync(new[]
                {
                    new Word
                    {
                        Name = "Manger",
                        Definition = "Action de se nourrir"
     
                    },
                    new Word
                    {
                               Name = "Ecole",
                        Definition = "Pour s'instruire"
                    },
                    new Word
                    {
                                   Name = "Pelle",
                        Definition = "Pour creuser"
                    }
                });
            }
        }
    }

    c'est dans la fin du code que je vois pas comment récupérer le contenu des TextBox pour le mettre à la place de Name et Definiton et insérer dans la base avec un bouton Enregistrer.

    Voilà j'espère que vous m'avez compris merci de votre aide !

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 51
    Points
    51
    Par défaut
    Je crois qu'il y a un premier problème au niveau de ton datacontext

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataContext="{Binding Source={StaticResource Locator}, Path=Main}"
    Main ne devrait pas être MainViewModel ? enfin ça dépend de ce que tu à mis dans ton ViewModelLocator c'est vrai.



    Ensuite il doit manquer une partie du code dans ton mvvm non ? tu n'as pas de command pour SaveWord ? un truc du genre (SaveWordCommand = SaveWord)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private RelayCommand _saveWordCommand ;
     
            public RelayCommand SaveWordCommand  
            {
                get
                {
                    if (_saveWordCommand   == null)
                        _saveWordCommand = new RelayCommand(SaveWord);
     
                    return _saveWordCommand ;
                }
            }
    Et tu n'a pas de propriété name non plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
            private string _name;
     
            public string Name
            {
                get
                {
                    return _name;
                }
                set
                {
                    if (_name == value)
                        return;
     
                    _name= value;
     
                    RaisePropertyChanged("Name");
                }
            }

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse !

    Pour le datacontext il est bien renseigné dans le ViewModelLocator.

    Ce que je comprends pas c'est comment récupérer des informations que l'utilisateur inscrit dans les textbox et au click que celle-ci s'insère dans la base ....

  4. #4
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    C'est ce qui est expliqué plus haut ...

    tu utilises MVVM donc le Binding.

    Pour une TextBox tu dois avoir une propriété dans ton ViewModel qui correspond à ta variable (Ici Name).

    Dans le XAML de ta View tu auras:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    <TextBox Text="{Binding Path=Name, Mode=TwoWay/>"
    ...
    Et comme par magie tu récupère ce qui est écrit dans la TextBox dans ton ViewModel.

    Pour sauver le tout dans ta BD, là encore c'est expliqué plus haut, tu passes par une RelayCommand que tu Bind sur ton Bouton.

    Voilà
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour les précisions, je vais aller tester tout ça =) !

Discussions similaires

  1. [MySQL] Insertion qui échoue avec valeur nulle
    Par alaska750 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/09/2009, 19h41
  2. INSERT SQL : problème avec valeurs à entrer
    Par St-Jean dans le forum VBA Access
    Réponses: 5
    Dernier message: 25/09/2007, 16h18
  3. INSERT multi-lignes avec valeurs connues
    Par herve91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 23h13
  4. Réponses: 31
    Dernier message: 28/04/2006, 11h09
  5. INSERT avec valeur connue et résultat d'un SELECT...
    Par snoop dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/04/2005, 08h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo