2011-06-14 45 views
0

它很容易做到這一點,但這是我第一次動態地生成GridView。每個GridView單元格在創建時都有自己的CSS樣式。在RowDataBound事件我設置了高亮像往常一樣:無法突出顯示來自JavaScript的動態創建的GridView的行

e.Row.Attributes.Add("onmouseover", "this.style.cursor='pointer';HilightRow(this);") 
e.Row.Attributes.Add("onmouseout", "HilightRow(this);") 

在劇本方面我有以下幾點:

var curSelRow = null; 
function HilightRow(row) { 
    var selRow = row; 
    var i; 
     . 
     . 
    if (selRow != null) { 
     curSelRow = selRow; 
     curSelRow.style.backgroundColor = '#FFEEC2'; 
    } 
} 

我在劇本跟蹤這個和它的正常工作,有沒有錯誤,當我在有問題的行上觀看時,它會正確顯示正確的背景顏色值(即#FFEEC2),但懸停不會更改該行的顏色。我很困惑。不知道爲什麼會發生這種情況,正如我所說的,之前我已經做了很多次,沒有出現問題,但Gridviews在過去並不具有活力。

回答

0

我不確定您是否顯示了所有代碼,但看起來over和out函數都設置了相同的bgcolor(#FFEEC2)。

onmouseover和onmouseout都調用HilightRow(this)。最初的onmouseover是否設置了bgcolor?

+0

是,在將初始鼠標的顏色和複製以前的(未顯示),但我從來沒有達到那個點,因爲初始顏色從來沒有用鼠標懸停設置。 – user798287 2011-06-14 20:38:50

0

我終於明白了這個問題。在設置突出顯示之前,您必須做的是通過設置curSelRow.cells[i].style.backgroundColor = '',將當前應用的樣式移除到該行。現在您可以使用curSelRow.style.backgroundColor = '#FFEEC2'突出顯示該行,這會將行設置爲高亮值。

此外,您必須保存每個單元格自己的樣式,然後重置值並在光標離開該行時恢復每個單元格值。否則,您將鼠標懸停在每一行的白色。同樣,請記住在將每個單元格的樣式設置爲最初的樣式之前,重置突出顯示行的樣式。

真是痛苦!

0

一個更好的解決方案,我認爲是增加一個類的行。 Like class =「Hilightrow」。 避免html元素中的腳本和行爲單獨的結構。

var hiliclass = "Hilightrow"; 
    var trhilight = document.getElementById("mytable").getElementsByTagName("tr"); 
    var len = trhilight.length; 
    for(var i=0;i<len;i++) { 
     if(trhilight[i].className == hiliclass) { 
      trhilight[i].onmouseover = function() { 
        trhilight[i].style.backgroundColor = "red"; 
      } 
      .... 

} 

    } 

而且具有腳本函數裏面並調用它裏面的window.onload或 使用自調用函數是這樣的:

function highlightrows() { 
    ..// my code 
    }(); 
相關問題