cs_bibicool
Messages postés81Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention 7 février 2007
-
27 avril 2005 à 16:18
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 2011
-
28 avril 2005 à 11:13
Bonjour,
voilà j'ai trouvé un code bien pratique me permettant de colorier une case d'un datagrid en fonction de la valeur d'une autre case.
Pour ce faire lorsque je crée mon datagrid j'ajoute ceci :
FormattableTextBoxColumn dgFormatColStyle =
new FormattableTextBoxColumn();
int test = Convert.ToInt16(tmpDataGrid[e.Row,16]);
switch (test)
{
case 100 :
e.BackBrush = RedBrush;
break;
case 50 :
e.BackBrush = OrangeBrush;
break;
case 33 :
e.BackBrush = GreenBrush;
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);;
}
}
Bon désolé pour le code, mais ca me semble indispensable pour comprendre.
Donc lorsque ma cellule est créée, si la valeur de la cellule de ma colonne 16 est égale à 100 il me la peint en rouge si 50 en orange et si 33 en vert.
Jusque là super ca fonctionne.
Mon problème est que dans mon datagrid, j'ai deux tables, et donc une ligne de mon datagrid me permette de voir en cliquant dessus ses lignes qui lui sont liées. (fonctionnalités basiques des datagrids remplis avec un dataset contenant deux tables liées).
Maintenant lorsque je vois les lignes filles, je peux au dessus apercevoir la ligne mère. OK le gros problème est que la cellule possède toujours l'évènement. mains dans ce cas-ci il essaie de colorier la case de mes cellules filles. Ce qui fait tout planter, étant donné que dans mon exemple, mes lignes filles n'ont que 8 cases. Il ne trouve donc pas la 16ème et j'ai une exception.
Avez-vous une idée me permettant de rendre cet évènement uniquement actif lorsque je suis dans l'affichage des lignes mères ?
Avez-vous une autre façon de procéder pour colorier une case ?
et tu fais en sorte que seul les lignes filles correspondant a ta mere s'affiche (rowfilter, chargement a la volée, datarelation, ...)
ou tu fais un
try
{
int test = Convert.ToInt16(tmpDataGrid[e.Row,16]);
}
catch
{
test = 0;
}
tu rajoute un catch qui evite que tout ton programmae plante...
l'exeption sera leve mais traiter avec le test=0, du coup pur les filles il ne fera rien...
cs_bibicool
Messages postés81Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention 7 février 20071 28 avril 2005 à 10:41
Je vais investiguer dans ta solution... en tout cas merci.
Sinon j'avais plus ou moins contourné le problème en ajoutant à la colonne 16 dans mes lignes filles le champs testés dans ma ligne parent. Ca fonctionne mais pas très propre je trouve, je dois ajouter 8 colonnes pour résoudre le problème.
Ton idée de deux datagrid pourrait être pas mal, c'est vrai.
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 201114 28 avril 2005 à 11:13
plutot que de rajouter tes x colonne dans ta table fille trap l'erreur avec le bout de code que je t'ai file au dessus...
c plus propre...je pense...que rajouter des colonnes...
ou test le nb de colonnes...avant de faire int test = Convert.ToInt16(tmpDataGrid[e.Row,16]);