Verdic
Messages postés3Date d'inscriptionvendredi 14 janvier 2005StatutMembreDernière intervention29 avril 2005
-
29 avril 2005 à 13:26
sobredim
Messages postés3Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention16 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
LUDINSKI
Messages postés441Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention22 mai 20127 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
sobredim
Messages postés3Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention16 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.