Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

2 février 2014 7 02 /02 /février /2014 01:38

1– DataBinding ComboBox, label/textBox

  binding3a

ComboBox

// On peut également afficher la liste des catégories dans une comboBox par exemple

// en changeant la catégorie sélectionnée le binding se fera automatiquement et la liste des clients pour cette catégorie sera listée dans le datagridView

cboCategories.DataSource = dataSet;

cboCategories.DisplayMember = "Category.Name";

cboCategories.ValueMember = "Category.Id";

 

Remplir une comboBox avec la liste des noms de catégories et sélectionner la catégorie du Client,sachant que ce client a une clé étrangère Categoryd(int)

// on remplit la comboBox avec la liste des catégories .On affiche la propriété Name, et en SelectedValue on réupérera l'Id

cboClientCategory.DataSource = dataSet;

cboClientCategory.DisplayMember = "Category.Name";

cboClientCategory.ValueMember = "Category.Id";

// à partir de la clé étrangère CategoryId de la table Client(elle est de type int) on sélectionne la catégorie

cboClientCategory.DataBindings.Add("SelectedValue", dataSet, "Client.CategoryId");          

 

Label

//on peut aussi afficher dans un label : la propriété Text le nom de la table Category du dataSet

lblCategoryId.DataBindings.Add("Text",dataSet,"Category.Name");

// autre exemple on affiche l'id de la catégorie correspondant la valeur courante de la comboBox(affichera "2" par exemple)

lblCategoryId.DataBindings.Add("Text", cboCategories, "SelectedValue");                    

 

2-Afficher le détail

binding4-copie-1.png  

J’utilise un BindingSource qui permet de mettre à jour facilement l’UI .

Avec un DataSet typé il est possible d’appeler la méthode AcceptChanges() pour valider les changements dans le dataSet et mettre à jour l’UI .

La méthode HasChanges() du dataSet permet de savoir si des modifications ont été apportées dans celui-ci

Il existe également le control BindingNavigator qui peut être utile pour la navigation et les actions de base .

   SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=dbDemo;Integrated Security=True");

        DataSet dataSet = new DataSet();

        SqlDataAdapter categoryAdapter;

        SqlDataAdapter clientAdapter;

        BindingSource clientBindingSource;

 

        private void FDetail_Load(object sender, EventArgs e)

        {

 

            categoryAdapter = new SqlDataAdapter("Select * from [dbo].[Category]", connection);

            dataSet.Tables.Add(new DataTable("Category"));

            categoryAdapter.Fill(dataSet.Tables["Category"]);

 

 

            clientAdapter = new SqlDataAdapter("Select * from [dbo].[Client]", connection);

            dataSet.Tables.Add(new DataTable("Client"));

            clientAdapter.Fill(dataSet.Tables["Client"]);

 

            clientBindingSource = new BindingSource();

            clientBindingSource.DataSource = dataSet;

            clientBindingSource.DataMember = "Client";

 

            clientDataGridView.DataSource = clientBindingSource;

 

            lblClientId.DataBindings.Add("Text", clientBindingSource, "Id");

            txtClientName.DataBindings.Add("Text", clientBindingSource, "Name");

            txtClientEmail.DataBindings.Add("Text", clientBindingSource, "Email");

 

            cboClientCategory.DataSource = dataSet;

            cboClientCategory.DisplayMember = "Category.Name";

            cboClientCategory.ValueMember = "Category.Id";

 

            cboClientCategory.DataBindings.Add("SelectedValue", clientBindingSource, "CategoryId");

 

 

Validation et mise à jour de la base

Valider les changements au niveau du dataSet(la base de données n’est pas modifiée ici,seule le dataSet et l’UI est mise à jour)

private void button1_Click(object sender, EventArgs e)

        {

            this.Validate();

            clientBindingSource.EndEdit();

        }

 

Mise à jour de la base (cas on a modifié un client)

  private void UpdateClient()

        {

            try

            {

                clientAdapter.UpdateCommand = new SqlCommand(@"UPDATE [dbo].[Client]

                                                            SET [Name] = @Name, [Email] = @Email, [CategoryId] = @CategoryId

                                                            WHERE Id = @Id", connection);

                clientAdapter.UpdateCommand.CommandType = CommandType.Text;

                clientAdapter.UpdateCommand.Parameters.Add(new SqlParameter("@Name", SqlDbType.Char, 0, ParameterDirection.Input, 0, 0, "Name", DataRowVersion.Current, false, null, "", "", ""));

                clientAdapter.UpdateCommand.Parameters.Add(new SqlParameter("@Email", SqlDbType.Char, 0, ParameterDirection.Input, 0, 0, "Email", DataRowVersion.Current, false, null, "", "", ""));

                clientAdapter.UpdateCommand.Parameters.Add(new SqlParameter("@CategoryId", SqlDbType.Int, 0, ParameterDirection.Input, 0, 0, "CategoryId", DataRowVersion.Current, false, null, "", "", ""));

                clientAdapter.UpdateCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int, 4, ParameterDirection.Input, 0, 0, "Id", DataRowVersion.Current, false, null, "", "", ""));

 

 

                clientAdapter.Update(dataSet.Tables["Client"]);

            }

            catch (DBConcurrencyException)

            {

                MessageBox.Show("Impossible de mettre à jour.");

            }

        }

}

Et donc il suffit d’appeler la méthode pour valider les changements

private void button1_Click(object sender, EventArgs e)

        {

            this.Validate();

            clientBindingSource.EndEdit();

            UpdateClient() ;

        }

 

Il est possible de s’abonner aux événements  des DataTables tel que RowChanged,ColumnChanged,etc.

dataSet.Tables["Client"].ColumnChanged += FDetail_ColumnChanged;

 

  void FDetail_ColumnChanged(object sender, DataColumnChangeEventArgs e)

        {

          

            // peut permettre de vérifier si la saisie est correcte

            if (string.IsNullOrEmpty(e.ProposedValue.ToString().Trim()) && e.Column.ColumnName=="Name")

            {

                // on peut par exemple utiliser un errorProvider pour une textBox

                errorProvider1.SetError(txtClientName, "Nom nécessaire");

            }

        }

 

Rejeter les changements

La méthode RejectChanges() du dataSet annule les changements de valeur

CancelEdit() du bindingSource permet de mettre à jour l’UI

 

  private void btnCancel_Click(object sender, EventArgs e)

        {

            dataSet.RejectChanges();

            clientBindingSource.CancelEdit();

          

        }

 

Partager cet article

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article

commentaires