2011-07-20 21 views
1

這種「備用」 &「正常」給不同的顏色對行的GridView的onclick

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

如果我點擊行背景變色的背景:

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

工作的罰款。

所以每次點擊一行時背景都會改變。 我希望當用戶點擊不同的行時,背景會發生變化,並撤消另一行的背景。 任何想法?

+0

歡迎。你會想要更具體的問題和標籤。我無法分辨您是在談論Android,WinForms,Qt還是小海豹。我甚至不確定你在使用什麼語言 - VB? – Cheezmeister

+0

這是VS2010 NET4上的webform。正如twip指出的那樣。這必須在觸發onclick後儘快完成。 –

回答

1

要保留突出顯示行的原始顏色,以便在突出顯示不同行時返回原始顏色,請嘗試以下解決方案。

JavaScript的網頁上:

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; 
     } 
    }     

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

代碼

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 
的樣式210

適用於Chrome 12,Firefox 3.6和IE 8(正如我掌握的那些)。

+0

超凡!它確實有用!嘟嘟保持它!非常感謝你! –

-1

你的措辭有點混亂,但我想我明白你在問什麼。

當您運行這行代碼:

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

可以該行前添加你的GridView的顏色每次重置您正在運行的方法

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

謝謝,我已經嘗試過那個,但是,沒有好處。 –

0

如果我沒有理解正確地說,問題在於,您希望表單在處理點擊事件後保持以前樣式的交替行顏色?

幾個可能的解決方案:每次單擊,然後處理的亮點,這還不是特別有效的

  1. Restyle整個電網。

  2. 在突出顯示之前存儲先前突出顯示的行的行ID及其顏色。然後,當您處理點擊時,恢復前一行的顏色並突出顯示剛纔單擊的行。

+0

點#1,因爲你說效率不高,但可以說gridview每次最多10行。我如何去重新風格? –

+0

point#2這正是我想要完成的,但是如果即時將onclick添加到行中。我可以......「onlick」,「改變背景」然後......我在哪裏寫代碼來完成剩下的工作? –

+0

你需要處理這個服務器端嗎?突出顯示該行的目的是什麼?如果你不必每次回發,你都可以考慮用JavaScript來處理。 – twip

相關問題