2012-04-23 50 views
2

我有一個GridView綁定到數據表。我想爲具有條件的行添加上下文。我在RowDataBound事件使用此代碼:如何在gridView中顯示某些行的上下文菜單

if (e.Row.Enabled == true && e.Row.Cells[6].Enabled == true) 
     { 
      e.Row.CssClass = "HasMenu"; 
     } 

現在我寫這篇文章的代碼顯示網格上下文菜單:

$(document).ready(function() { 

     $('#menu').click(function() { 
      $('#menu').hide(); 
     }); 
     $(document).click(function() { 
      $('#menu').hide(); 
     }); 


     $("#" + '<%= GridView1.ClientID %>').bind("contextmenu", function (e) { 
      $('#menu').css({ 
       top: e.pageY + 'px', 
       left: e.pageX + 'px' 
      }).show(); 

      return false; 

     }); 
    }); 

問題是我不顯示任何上下文菜單(不是資源管理器右鍵菜單而不是我的自定義上下文菜單)的行沒有HasMenu css類和顯示上下文菜單的行有HasMenu css類。需要什麼改變我的腳本?

感謝

回答

1

現在你聽contextmenu事件對整個gridview的:

$("#" + '<%= GridView1.ClientID %>') 

你需要改變,要各行:

$('#" + '<%= GridView1.ClientID %> rowselector.HasMenu') 

在哪裏rowselector然而在您的標記中定義了一行。

舉例來說,如果一個行是<TR>,那麼你會寫

$("#" + '<%= GridView1.ClientID %> tr.HasMenu') 

否則,如果該行是孩子,你可能需要寫類似

$("#" + '<%= GridView1.ClientID %> > div.HasMenu') 

注意<DIV>元素,你'重新連接兩個純字符串,沒有涉及JavaScript變量。你還不如寫:

$('#<%= GridView1.ClientID %> rowselector.HasMenu') 
+0

這導致IE上下文菜單出現在一個沒有'HasMenu'類 – Arian 2012-04-23 09:10:43

+0

@Kerezo行:是的,我沒有一開始你添加偵聽到整個菜單注意。看我的編輯。 – 2012-04-23 09:13:49

+0

如果瀏覽器是IE瀏覽器,並且行沒有HasMenu類,則在contextmenu處理程序中返回false – rt2800 2012-04-23 09:16:35

相關問題