.Net Gridview восстанавливает чередующийся цвет после наведения указателя мыши

У меня есть сетка с набором свойств alternatingRowStyle.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource2" OnRowDataBound="GridView1_RowDataBound"
        onselectedindexchanged="GridView1_SelectedIndexChanged" AlternatingRowStyle-BackColor="#f0f1f3">

Я также хочу выделять строки, когда курсор перемещается следующим образом:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)  
{  
        if (e.Row.RowType == DataControlRowType.DataRow)  
        {  
            e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#ceedfc'");  
            e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=''");  
            e.Row.Attributes.Add("style", "cursor:pointer;");

Проблема, с которой я столкнулся, заключается в том, что когда мышь перемещается мимо строки, она восстанавливается до белого, а не до предыдущего цвета, который отличается в половине строк. Я предполагал, что могу сохранить текущий цвет строки перед заменой его для каждого события «onmouseove», но это кажется дорогостоящим и тревожным, если быстрое движение мыши может все испортить.

Я не вижу свойства для строк gridview, которое сообщало бы мне, является ли это альтернативной строкой, но будет ли здесь лучше всего простое определение нечетности / четности в rowindex?

Есть предложения лучше?

Спасибо.

-Дэн


person nycdan    schedule 04.01.2011    source источник


Ответы (3)


Сохраните оригинальный стиль. Затем установите для стилей backgroundColor значение this.originalstyle.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)  
{  
        if (e.Row.RowType == DataControlRowType.DataRow)  
        {  
            e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#ceedfc'");  
            e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle");  
            e.Row.Attributes.Add("style", "cursor:pointer;");
person SwDevMan81    schedule 04.01.2011
comment
Сработало отлично. Не рассматривал настраиваемый атрибут для сохранения исходного цвета. Спасибо. - person nycdan; 04.01.2011

Я предпочитаю использовать CSS для цвета при наведении

tr.odd {
  background-color: White;
}
tr.even {
  background-color: #f8f8f8;
}
tr.odd:hover {
  background-color: #f3fcfa;
}
tr.even:hover {
  background-color: #ebf3f1;
}
person Aximili    schedule 23.02.2011

Используя JQuery:

$(document).ready(function ()
{
    var original = "";

    $("#<%=yourGridViewNameHere.ClientID%> tr:has(td)").hover(function ()
    {
        original = $(this).css("background-color");

        $(this).css("background-color", "Pink");
    }, function ()
    {
        $(this).css("background-color", original);
    });
});

Исходный ответ я получил здесь , Я просто немного подправил его для своих нужд, как показано выше.

Наслаждаться

person dyslexicanaboko    schedule 24.10.2012