Tutoriel DataGridView

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

A voir également
Ce document intitulé « Tutoriel DataGridView » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.