CheckBox dans un DataGrid (Windows Form)

Verdic Messages postés 3 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 29 avril 2005 - 29 avril 2005 à 13:26
sobredim Messages postés 3 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 16 juin 2006 - 16 juin 2006 à 18:17
Bonjour,



Je cherche un moyen de pouvoir insérer une colonne CheckBox sans mapping dans un DataGrid.

J'aimerais que ce checkbox réponde à quelques conditions :

- qu'il soit initialisé (non grisé) à false

- qu'il garde sa valeur quand il est checké



En effet, j'ai réussi à insérer une colonne checkbox mais celui ci ne
s'initialise pas bien que je lui donne une valeur dans le dataset et en
plus il ne garde pas sa valeur lorsque je change ma sélection.



Voici mon code :



OleDbDataAdapter MonDa = new OleDbDataAdapter(CommandText,ConnectionString);

DataSet toto = new DataSet();

MonDa.Fill(toto);



DataColumn dataColumn = new DataColumn(); // C'est cette colonne que je rajoute en plus

dataColumn.ColumnName = "Discontinued"; // des autres

toto.Tables[0].Columns.Add(dataColumn);



foreach (DataRow dataRow in toto.Tables[0].Rows)

{

dataRow["Discontinued"] =
false; // C'est ici que j'essaye d'initialiser la case à cocher




// Mais ca
ne marche pas

}



dataGrid1.DataSource = toto;



// Dans mon DataGridTableStyle j'ai bien fait gaffe de faire un DataGridBoolColumn





Merci d'avance pour votre aide



P.S : Il s'agit ici de code pour Windows Applications (Forms) et non
ASP.NET , donc s'il vous plait ne me donner pas des liens pour ce
dernier

4 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
29 avril 2005 à 14:16
Salut Verdic,

Pour ton problème, il te suffit de dériver de la classe DataGridBoolColumn, comme celà :

public
class
DataGridBoolColumnStyle : DataGridBoolColumn
{
/// <summary>Constructeur
</summary>
public DataGridBoolColumnStyle() : base
()
{
// On interdit les valeurs nulles par défaut
base.AllowNull = false
;
}

// On surcharge la méthode Paint
protected override void Paint( Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool
alignToRight )
{
// La valeur de la cellule est à null
if
( GetColumnValueAtRow( source, rowNum ) == System.DBNull.Value )
{
// Affecte la valeur par défaut, ici FALSE
SetColumnValueAtRow( source, rowNum, false
);
}

// On rappel la méthode de base
base.Paint( g, bounds, source, rowNum, backBrush, foreBrush, alignToRight );
}
}

et d'utiliser ce style pour ta colonne !!
Ca devrai suffir, mais tiens-moi au courant
0
Verdic Messages postés 3 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 29 avril 2005
29 avril 2005 à 15:09
Merci d'avoir répondu aussi vite !



Cependant, il me lève une erreur lorsqu'il y a plus d'une ligne en me
disant que la position du ListManager doit etre égale à rowNum.
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
4 mai 2005 à 08:33
Salut,

J'ai essayer de reproduire ton erreur, mais rien à faire...
Tu fais quelquechose de spécial sur ton DataGrid ?
0
sobredim Messages postés 3 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 16 juin 2006
16 juin 2006 à 18:17
je suis en VB.net et j'ai eu le meme message d'erreur, j'ai donc mis la propriété position à la valeur rowNumbre avant de faire le set
ce qui donne le code suivant :

          protected overrides sub Paint( g as Graphics, bounds as Rectangle, [Source] as CurrencyManager, rowNum as Integer,  backBrush as Brush,  foreBrush as Brush,  alignToRight as Boolean )
  
              ' La valeur de la cellule est à null
              if  GetColumnValueAtRow( source, rowNum ) is System.DBNull.Value  then
            
                 ' Affecte la valeur par défaut, ici FALSE
                 source.Position = rowNum
                 SetColumnValueAtRow( [Source], rowNum, System.DBNull.Value )
              end if
       
              ' On rappel la méthode de base
              Mybase.Paint( g, bounds, [Source], rowNum, backBrush, foreBrush, alignToRight )
           end sub

Par contre, au lieu de metre false comme valeur, j'ai du mettre DBNull.value. même si cela semble paradoxale, car apparement cela ne changerai rien. Mais nous avons bien l'effet désiré, c'est à dire par defaut ne pas avoir la coche grisée et cochée.
Remarque : mon dataGridBoolColumn accepte les valeurs Nulles.
0
Rejoignez-nous