Gridview onclick - PullRequest
       7

Gridview onclick

1 голос
/ 20 июля 2011

Этот «альтернативный» и «нормальный» дает другой цвет фона строк

    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 ]

1 голос
/ 21 июля 2011

Чтобы сохранить исходный цвет выделенной строки, чтобы он возвращался при выделении другой строки, попробуйте следующее решение.

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 (так как это то, что у меня под рукой).

0 голосов
/ 20 июля 2011

Если я правильно понимаю, проблема в том, что вы хотите, чтобы таблица поддерживала ранее стилизованные цвета чередующихся строк после обработки событий щелчка?

Несколько возможных решений:

  1. Восстановите всю сетку каждый раз, когда вы щелкаете, а затем обрабатываете выделение, что не очень эффективно.

  2. Сохраняет идентификатор строки ранее выделенной строки и ее цветпрежде чем это было выделено.Затем при обработке щелчка восстановите цвет предыдущей строки и выделите только что нажатую строку.

0 голосов
/ 20 июля 2011

Ваша формулировка немного сбивает с толку, но, думаю, я понимаю, о чем вы спрашиваете.

Когда вы запускаете эту строку кода:

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

Вы можете добавить свое представление в виде сеткицвет прямо перед этой строкой, чтобы сбросить его каждый раз, когда вы запускаете этот метод

GV_Id.RowStyle.BackColor = System.Drawing.Color.White;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...