2012-04-23 1 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') 

В противном случае, если ряды ребенка <DIV> элементы, которые вы могли бы хотеть, чтобы написать что-то вроде

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

Обратите внимание, что вы 'конкатенируя две простые строки, нет никаких переменных javascript. Вы могли бы также написать:

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

Это вызывает контекстное меню IE появляются строки, которые не класс 'HasMenu' – Arian

+0

@Kerezo: Да, я не заметил сначала, что вы добавили слушателя ко всему меню. См. Мое редактирование. –

+0

return false во время обработчика contextmenu, если браузер IE и Row не имеет класса HasMenu – rt2800