Récupérer l'Index d'une ligne de DataGrid

Récupérer l'Index d'une ligne de DataGrid - C#/.NET managed - Programmation

Marsh Posté le 07-08-2006 à 20:39:58    

salut tous,
j'ai un datagrid avec une colonne qui contient des DropDownList avec id="dp1". je voudrais récupérer l'index de la ligne ou il a été cliké dans le datagrid, c a d qu'au moment ou on sélectionne quelque chose sur le dropdownlist, on récupère l'index de cette ligne du datagrid.
Merci infiniment

Reply

Marsh Posté le 07-08-2006 à 20:39:58   

Reply

Marsh Posté le 07-08-2006 à 20:53:16    

Dans la méthode qui est apellée quand l'évènement de changement de valeur est lancé, tu as un paramètre 'sender'.
C'est l'instance de la DropDownList qui a lancé l'évènement.
Pour savoir à quelle ligne elle correspond, tu fais une boucle sur toutes des DropDownList, jusqu'à ce que tu trouves la bonne :

Code :
  1. if(sender == mydropdownlist[i])
  2.   // alors i est l'indice de ma ligne

Reply

Marsh Posté le 07-08-2006 à 21:03:02    

a quoi correspond mydropdownlist? si c'est l'ID du dropdownlst sur la colonnes du datagrid alors est ce que l'écriture dmdropdownlist[i] est juste ou devrai je mettre
int i=0;
foreach(ItemDataGrid element in myDatagrid.Items)
{
  DropDownList dp = (DropDownList)element.FindConntrol("mydropdownlist" );
if (sender != dp)  i++;
}

Reply

Marsh Posté le 07-08-2006 à 21:03:55    

i correspondera a la fin de la boucle a l'index de la ligne ou il a été cliké sur le dropdownlist

Reply

Marsh Posté le 08-08-2006 à 13:44:44    

tibik a écrit :

a quoi correspond mydropdownlist? si c'est l'ID du dropdownlst sur la colonnes du datagrid alors est ce que l'écriture dmdropdownlist[i] est juste ou devrai je mettre
int i=0;
foreach(ItemDataGrid element in myDatagrid.Items)
{
  DropDownList dp = (DropDownList)element.FindControl("mydropdownlist" );
if (sender != dp)  i++;
}


Ouaip, c'est ça, sauf que ton foreach il est pas top : si tu as 100 lignes, et que tu clickes sur la première, tu ne sortiras pas de ta boucle avant d'avoir tout parcouru.
Je conseille un :

Code :
  1. // BOUCLE DE RECHERCHE SUR MES DATAROWS
  2. int i = 0;
  3. DropDownList current = null;
  4. // la boucle continue :
  5. // tant que je n'arrive pas au bout de mes lignes
  6. while((i < myDatagrid.Items)
  7.   // ou si je ne trouve pas de drop down list dans ce row
  8.   && (null != (dp = (element.FindControl("mydropdownlist" ) as DropDownList)))
  9.   // ou si cette drop down list n'est pas celle que je cherche
  10.   && (dp  != sender))
  11.   i++;
  12. // si je ne suis pas arrivé au bout de mes lignes
  13. if(i < myDatagrid.Items)
  14.   // alors j'ai trouvé la ligne clickée
  15.   ....

Beaucoup plus propre, mais un peu plus long à écrire.
 
Sinon, tu peux aussi faire un foreach/break mais c'est crado. A éviter pour un boulot professionnel ou si d'autres personnes sont susceptibles de bosser sur ton code après.

Reply

Marsh Posté le 13-08-2006 à 16:47:47    

désolé pour avoir répondu un peu tard
Merci ca a marché

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed