Gridview onclick

时间:2011-07-20 19:04:07

标签: asp.net vb.net gridview onclick

这个“替代”& “normal”为行的背景赋予不同的颜色

    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';")

工作没问题。

所以每次点击一行时背景都会改变。 我希望当用户点击不同的行时,背景会改变并撤消另一行的背景。 有什么想法吗?

3 个答案:

答案 0 :(得分: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

适用于Chrome 12,Firefox 3.6和IE 8(正如我手头的那些)。

答案 1 :(得分:0)

如果我理解正确,那么问题是您希望表在处理点击事件后保持其先前设置的交替行颜色?

一些可能的解决方案:

  1. 每次点击时重新整理整个网格,然后处理突出显示,这不是非常有效。

  2. 在突出显示之前,存储先前突出显示的行的行ID及其颜色。然后,当您处理单击时,恢复上一行的颜色并突出显示刚刚单击的行。

答案 2 :(得分:-1)

你的措辞有点让人困惑,但我想我明白你在问什么。

当你运行这行代码时:

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

您可以在该行之前添加gridview颜色,以便在每次运行该方法时重置它

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