2011-07-20 2 views
1

Cette « alternative » & « normale » donner de la couleur différente de l'arrière-plan des lignesGridview onclick

If (e.Row.RowState = DataControlRowState.Alternate) Then 
     e.Row.CssClass = "alternate" 
    Else 
     e.Row.CssClass = "normal" 
    End If 

si je clique sur un changement de fond ligne couleur:

e.Row.Attributes.Add("onclick", "this.style.background='LightCyan';") 

travail va bien.

Donc, chaque fois que je clique sur une ligne, l'arrière-plan change. Je voudrais que lorsque l'utilisateur clique sur une ligne différente, l'arrière-plan change et annule l'arrière-plan de l'autre. Des idées?

+0

bienvenue. Vous allez vouloir être plus précis avec votre question et vos tags. Je ne sais pas si vous parlez d'Android, de WinForms, de Qt ou de bébés phoques. Je ne suis même pas sûr de la langue dans laquelle vous travaillez - VB? – Cheezmeister

+0

Ceci est un formulaire Web sur VS2010 NET4. Comme twip le signaler. cela doit être fait dès que l'onclick est déclenché. –

Répondre

1

Pour conserver la couleur d'origine de la ligne en surbrillance afin qu'elle revienne lorsqu'une autre ligne est en surbrillance, essayez la solution suivante.

JavaScript sur la page:

var lastStyle; 
    var lastRowID; 

    function highlightRow(rowID, updatedStyle) { 
     var rowClicked = document.getElementById(rowID); 
     restoreRowColor(lastRowID, lastStyle); 

     lastStyle = rowClicked.className; 
     lastRowID = rowID; 

     rowClicked.className = "highlightRow";  
    } 

    function restoreRowColor(rowID, originalStyle) { 
     var previousRowClicked = document.getElementById(rowID); 

     if (previousRowClicked != null) {    
      previousRowClicked.className = originalStyle; 
     } 
    }     

Styles sur la page

.normalRow{background-color: #FFFFFF;} 
.alternateRow{background-color: #D3D3D3;} 
.highlightRow{background-color: #F0E68C;} 

code

Private Sub myGridView_RowCreated(ByVal sender As Object, 
    ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) 
    Handles myGridView.RowCreated 

    Dim rowID As String = "row" + e.Row.RowIndex.ToString 

    If e.Row.RowState = DataControlRowState.Normal Then 
     e.Row.CssClass = "normalRow" 
    ElseIf e.Row.RowState = DataControlRowState.Alternate Then 
     e.Row.CssClass = "alternateRow" 
    End If 

    If e.Row.RowType = DataControlRowType.DataRow Then 
     e.Row.Attributes.Add("id", rowID) 
     e.Row.Attributes.Add("onclick", 
      "highlightRow('" & rowID & "', '" & e.Row.CssClass & "')") 
    End If 
End Sub 

Fonctionne dans Chrome 12, Firefox 3.6 et IE 8 (car ce sont ceux que j'ai sous la main).

+0

Excelent !!! ça marche! twip continuez! Merci beaucoup! –

-1

Votre formulation est un peu confuse, mais je pense que je comprends ce que vous demandez.

Lorsque vous exécutez cette ligne de code:

e.Row.Attributes.Add("onclick", "this.style.background='LightCyan';") 

Vous pouvez ajouter votre couleur gridview juste avant cette ligne pour le réinitialiser chaque fois que vous utilisez cette méthode

GV_Id.RowStyle.BackColor = System.Drawing.Color.White; 
+0

Merci, j'ai déjà essayé celui-là mais, pas bon. –

0

Si je comprends correctement, le problème est que vous voulez que la table conserve ses couleurs de ligne alternativement dénommées précédemment après le traitement des événements de clic?

Quelques solutions possibles:

  1. Restyle la grille entière chaque fois que vous cliquez et traiter ensuite le point culminant, ce qui est pas très efficace.

  2. Enregistrez l'ID de ligne de la ligne précédemment mise en surbrillance et sa couleur avant qu'elle ne soit mise en surbrillance. Ensuite, lorsque vous traitez le clic, restaurez la couleur de la ligne précédente et mettez en surbrillance la ligne que vous venez de cliquer.

+0

point # 1 comme vous l'avez dit pas efficace mais disons que le gridview est de 10 lignes maximum à chaque fois. Comment puis-je re-style? –

+0

point # 2 C'est exactement ce que je veux accomplir mais si je rajoute l'onclick à la ligne. puis-je juste ... "onlick", "changer d'arrière-plan" puis ... où puis-je écrire le code pour faire le reste? –

+0

Avez-vous besoin de gérer ce côté serveur? Quel est le but de mettre en évidence la rangée? Si vous n'avez pas à poster à chaque fois, vous pouvez envisager de le faire avec JavaScript. – twip