2009-06-20 2 views
0

Это является продолжением моей предыдущей вопрос: link textСкрытие/Контроль в колонке Отмена скрытия GridView в - сдвигая проблема

В колонке GridView, я есть LinkButton и ярлык под ним.

Я хочу скрыть/показать ярлык при щелчке по ссылке. Я использую javascript, потому что я не хочу никаких обратных передач. Код:

protected void gvwComments_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LinkButton lButton = ((LinkButton)e.Row.Cells[2].FindControl("lbtnExpand")); 
      Label label = ((Label)e.Row.Cells[2].FindControl("lblBody")); 
      lButton.Attributes.Add("onclick", string.Format("HideLabel('{0}'); return false;", label.ClientID)); 

     } 
    } 



function HideLabel(button) { 

      var rowObj = document.getElementById(button); 


      if (rowObj.style.display == "none") { 
       rowObj.style.display = "block"; 

      } 
      else { 
       rowObj.style.display = "none"; 

      } 

     } 

Проблема заключается в том, что, когда я отобразите метку, нажав на кнопку, LinkButton будет сместилась немного верхний его исходное положение в клетке. Можно ли сохранить положение linkbutton в ячейке gridviews?

ответ

0

Я бы предложил вам изменить свой CSS с дисплея: ни один из них не отображается: скрытый, который скроет элемент управления, но сохранит пространство, препятствующее прыжкам.

+0

Это не хорошо, потому что скрытая метка с большим текстом будет содержать пустое пространство в ячейке, и этого я не хочу! – 2009-06-20 22:18:30

0

Трюк заключается в использовании ключевого слова «это», а затем получить ссылку на строку и изменить ярлык оттуда.

У меня есть сообщение here, где у меня есть GridView с столбцом CheckBox и столбцом Name. Когда CheckBox установлен, цвет фона имени в этой строке изменяется. Я делаю это, начиная с этим атрибутом в колонке CheckBox в:

onclick="toggleSelected(this)" 

тогда у меня есть функция JavaScript, которая находит строку и изменяет следующую ячейку:

function toggleSelected(sender) { 
    // note that at this point the "this" is now "sender" -which is the checkbox 
    // get a reference to the row using the helper function - see below. 
    var row = GetParentElementByTagName(sender, "TR"); 

    if (sender.checked) 
     row.cells[1].className = "selected"; 
    else 
     row.cells[1].className = ''; 

} 

Это использует вспомогательную функцию:

function GetParentElementByTagName(element, tagName) { 
    var element = element; 
    while (element.tagName != tagName) 
     element = element.parentNode; 
    return element; 
} 

у вас есть немного другой Requirment, так что вы бы использовать что-то вроде:

var lbl = row.cells[1].childNodes[0].getElementsByTagName('label') 

, чтобы получить ссылку на ваш ярлык.

Смежные вопросы