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
//