Je vous présente 2 modèles de création d'un DataGridView
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /* Les variables */ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ private DataSet ds; private OdbcConnection myConnect; private OdbcDataAdapter da ; private string strCommand ; private OdbcCommand myCommand; private OdbcDataReader myReader; private DataTable laTable; /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /* Création de la connexion */ /* On peut évidemment charger une table Oracle, Access ou Sql */ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ string strConnect = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + DATABASE=" + mabase + ";" + "UID=;" + "PASSWORD=;" + "OPTION=3"; OdbcConnection myConnect = new OdbcConnection(); myConnect.ConnectionString = strConnect; myConnect.Open(); /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /* Chargement de la table */ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ // 1er Solution: la plus simple // Chargement direct d'une table du DataSet // dans les propriétées du DataGridView on choisi les options // à la ligne Columns: Collection on ajoute les colonnes // en mettant les noms de champs à la ligne DataPropertyName dataGridView1.AutoGenerateColumns = false; ds = new DataSet(); strCommand = "SELECT * FROM maTable "; da = new OdbcDataAdapter(strCommand, myConnect); da.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; /************************************************************************************/ // 2ème Solution: Ma préferée // Elle me permet de faire facilement tous les DataGridView du programme identiques strCommand = "SELECT * FROM maTable "; myCommand = new OdbcCommand(); myCommand.CommandText = strCommand; myCommand.CommandType = CommandType.Text; try { myCommand.Connection = myConnect; OdbcDataReader myReader = Command.ExecuteReader(CommandBehavior.CloseConnection); } catch(Exception ex) { MessageBox.Show("Erreur DataReader :" + ex.Message); } /*++++++++++++++++++++++++++ Création d'une DataTable ++++++++++++++++++++++++++++*/ string[] nomCol = new string[12]{"Code", "Nom", "Prenom", "","","","","","","","",""}; int[] largCol = new int[12]{100, 150, 150,0,0,0,0,0,0,0,0,0}; laTable = new DataTable(); laTable.TableName = "La Table"; DataColumn[] TabCol = new DataColumn[nomCol.Length]; for(int i = 0; i < nomCol.Length; i++) { TabCol[i] = new DataColumn(nomCol[i] ,Type.GetType("System.String")); TabCol[i].ColumnName = nomCol[i].ToString(); laTable.Columns.Add(TabCol[i]); } /*++++++++++++++++++++++++++ Chargement de la DataTable +++++++++++++++++++++++++++*/ try { while(monReader.Read()) { DataRow entree; entree = laTable.NewRow(); for(int i = 0; i < monReader.FieldCount; i++) { if(myReader .GetString(i) != null) { entree[i] = myReader.GetString(i); } } laTable.Rows.Add(entree); } } catch(Exception se) { MessageBox.Show("Erreur au chargement : " + se.Message); } /*++++++++++++++++++++++++++ Création du DataGridView ++++++++++++++++++++++++++++*/ dataGridView1.DataSource = laTable; StyleColonne(dataGridView1, nomCol, largCol); StyleLigne(dataGridView1); /*+++++++++++++++++++ Fonction des Création des Colonnes +++++++++++++++++++++++++*/ public void StyleColonne(DataGridView myDataGridView, string[] myNom, int[] myLarg) { // largeur des colonnes et affichage des noms de colonnes(si identiquent a la table) for (int i = 0; i < 12; i++) { if (myLarg[i] != 0) { myDataGridView.Columns[i].Width = myLarg [i]; myDataGridView.Columns[i].Name = myNom[i]; } else myDataGridView.Columns[i].Visible = false; } } /*+++++++++++++++++++++ Fonction des Création des Lignes +++++++++++++++++++++++++*/ /* J'ai choisi pour l'exemple quelques options */ public void StyleLigne(DataGridView myDataGridView) { // modifier les colonnes et les lignes myDataGridView.AllowUserToResizeColumns = false; myDataGridView.AllowUserToResizeRows = false; // couleur de fond myDataGridView.BackgroundColor = Color.White; // affichage des en-tête de colonnes myDataGridView.ColumnHeadersVisible = false; // couleur des séparations myDataGridView.GridColor = Color.White; // interdire les modifs des cellules myDataGridView.ReadOnly = true; // affichage des en-tête de ligne myDataGridView.RowHeadersVisible = false; // mode de selection des cellules myDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; myDataGridView.MultiSelect = false; // style des cellules myDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; myDataGridView.DefaultCellStyle.Font = Font("Book Antiqua", 9, FontStyle.Regular); } /************************************************************************************/ // 3ème Solution: // Il Existe une troisième solution que je n'ai pas developpée // Créer une classe MonDataGridView dérivée de DataGridView //