Partage
  • Partager sur Facebook
  • Partager sur Twitter

DataGridView - c#

Exception Non gérer

Sujet résolu
    20 juin 2020 à 16:25:03

    Bonjour la communauté. s'il vous plait j'ai un souci. je suis entrain de réaliser un projet dans le but de m'exercer un peu. je veut réaliser un programme c# windows form pour la gestion de bibliothèque et pour cela j'utilise un datagridview pour la collecte des fichiers et un fichier excel pour l'enregistrement de ces données. au chargement de la fenêtre les données devrons être  charger dans le datagrid l'utilisateur devrais pouvoir ensuite ajouter des lignes dans le datagrid sauf que le message d'exception qui est affiché es: "impossible d'ajouter par programmation des lignes à la collection de lignes datagridview lorsque le contrôle est lié aux données". du coup impossible pour l'utilisateur d'ajouter une nouvelle. le code pour la connexion au fichier excel pour l'insertion des données dans le datagrid

    System.Data.OleDb.OleDbConnection MyConnection;
                System.Data.DataSet DtSet;
                System.Data.OleDb.OleDbDataAdapter MyCommand;
                MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\NGOUNOU\Desktop\Livre.xlsx';Extended Properties=Excel 12.0;");
                MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Feuil1$]", MyConnection);
                MyCommand.TableMappings.Add("Table", "Net-informations.com");
                DtSet = new System.Data.DataSet();
                MyCommand.Fill(DtSet);
                dataGridView1.DataSource = DtSet.Tables[0];
                MyConnection.Close();

    Code pour le bouton ajouter pour une nouvelle ligne

                    dataGridView1.Rows.Add(IntLivre.Text, MaisonEdition.Text, AuteurLivre.Text, type, LbDate.Text);
    

    Le deuxième problème réside dans l'enregistrement dans le fichier excel. quand j'appuis sur le bouton enregistré une exception est généré

    l'image de l'execption 



    et le sode du bouton enregistré

    private void Btn_Enregistre_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("voulez vous enregistrer les données?", "confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    try
                    {
                        string chemin = "";
                        saveFileDialog1.Filter = "Document Excel|.*xlsx";
                        if (saveFileDialog1.ShowDialog() == DialogResult.OK) chemin = saveFileDialog1.FileName;
                        StreamWriter writer = new StreamWriter(chemin);
                        Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
                        Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
                        Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
                        worksheet = workbook.Sheets[1];
                        worksheet = workbook.ActiveSheet;
                        worksheet.Name = "CustommerDetail";
                        for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
                        {
                            worksheet.Cells[i, 1] = dataGridView1.Columns[i - 1];
                        }
                        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                        {
                            for (int j = 0; j < dataGridView1.Columns.Count; j++)
                            {
                                worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                            }
                        }
                        var sauvegarder = new SaveFileDialog();
                        sauvegarder.FileName = "Livre";
                        sauvegarder.DefaultExt = "xlsx";
                        if (sauvegarder.ShowDialog() == DialogResult.OK)
                        {
                            workbook.SaveAs(sauvegarder.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                        }
                        app.Quit();
                    }
                    catch (Exception E)
                    {
                        MessageBox.Show("erreur d'enregistrement"+E.Message);
                    }
                }
            }

    j'aimerai savoir qu'elles sont mes erreurs et si possible des solutions et d'autre méthode pour l'importation et l'exportation des données via excel et s'il y une autre méthode plus efficace de gérer ses données que de passer par le fichier excel. 

    Merci à vous

    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2020 à 22:34:58

      je vous salut une foi de plus. Je n'ai toujou pas évolution avec mon projet sur cité
      • Partager sur Facebook
      • Partager sur Twitter
        22 juin 2020 à 10:21:19

        Bizarrement, l'exposé de vos problèmes porte leur solution.

        Le premier problème, c'est qu'en faisant du DataBinding ligne 9 du premier code (ce qui est très très bien), vous faites en sorte que l'affichage soit toujours synchrone avec le contenu de la DataTable de "DtSet".

        Une DataGridView, normalement, gère parfaitement ce type de lien en utilisant l'API de la DataTable.

        Donc, vous avez "customisé" l'insertion des données sans passer directement par la DataGridView ?

        Dans ce cas, il ne faut pas essayer de modifier l'affichage dans la DataGridView mais il faut changer le contenu de sa "DataSource", ici la première table de "DtSet".

        Vous pouvez la récupérer directement depuis la propriété "DataSource" de la DataGridView.

        Vous insérez vos données dans la DataTable et la DataGridView l'affichera automatiquement lors du prochain rafraîchissement de l'IHM.

        Quelques remarques pour ce premier code source : utilisez l'instruction "using" ( https://docs.microsoft.com/fr-fr/dotnet/csharp/language-reference/keywords/using-statement ) pour avoir un codage plus simple et plus sûr ( pitié, plus ces horribles "Close").

        En ADO.NET, les concepts de Command et de DataAdapter sont des choses très différentes, faites en sorte que le nom des variables ne fasse pas cet amalgame.

        Le deuxième problème n'a pas lieu d'être. Vous devriez utiliser le même mécanisme pour l’enregistrement que pour le chargement des données : un DataAdapter :

        https://docs.microsoft.com/fr-fr/dotnet/api/system.data.common.dataadapter.update?view=netcore-3.1

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          22 juin 2020 à 21:31:02

          Bonsoir Mr. Merci pour votre intervention. le problème réside sur le fait que les donnée doivent être ajouter par l'utilisateur finale et chaque que foi que l'utlilisateur ferme l'application, à la prochaine ouverture ces données doivent être récupérer par l'application afin qu'il puisse encore les modifier. Merci
          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2020 à 22:24:00

            Et ?

            C'est le rôle de la méthode Update d'un DataAdapter.

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              22 juin 2020 à 23:11:19

              Okay Merci Beaucoup je vous ferais le FeetbaCk 

              • Partager sur Facebook
              • Partager sur Twitter

              DataGridView - c#

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown