2009-07-02 14 views

Odpowiedz

5

Chcesz użyć COLGROUP to zrobić, w przeciwnym razie trzeba zastosować styl do każdą komórkę na każdy wiersz, który będzie strasznie nieefektywne i prawdopodobnie zawiśnie przeglądarka, zwłaszcza jeśli twoja siatka jest duża. Wszystkie wyżej wymienione odpowiedzi oparte na bibliotece trzeciej (jQuery) robią to powoli/leniwie. Ponieważ wszystkie JavaScript działa po stronie klienta, prawdopodobnie chcesz mieć trochę więcej uwagi, jeśli chodzi o wydajność.

Tu ya go ...

function hideColumns(tableId, colIndexArray) { 
    var tbl = document.getElementById(tableId); 
    if(!tbl) return; 

    var rows = tbl.getElementsByTagName("TBODY"); 

    if(rows.length == 0) 
    rows = tbl.getElementsByTagName("TR"); 
    else 
    rows = rows[0].getElementsByTagName("TR"); 

    var cols = rows[rows.length - 1].getElementsByTagName("TD"); 
    var colgroup = document.createElement("COLGROUP"); 

    for(var i = 0, l = cols.length; i < l; i++) { 
    var col = document.createElement("COL"); 

    for(var num in colIndexArray) { 
     if(colIndexArray[num] == i) { 
     if(document.all) 
      col.style.display = 'none' 
     else 
      col.style.visibility = 'collapse'; 

     break; 
     } 
    } 

    colgroup.appendChild(col); 
    } 

    tbl.insertBefore(colgroup, tbl.childNodes[0]); 
} 

Używaj go tak ...

var columnsToHide = [0, 1, 2]; // hide the first 3 columns 
var tableId = "tableIdHere"; // view the source of your page to get this 
hideColumns(tableId, columnsToHide); 

Testowany w IE7 i FF3: Hide Table Columns Using Javascript

+0

Wow poprawną odpowiedź bez użycia JQuery. +1 – epascarello

+0

Datagridy nie emitują grup colgroups. – Randolpho

+1

LOL! Tak, i dlatego używam Javascript, aby wprowadzić je do DOM. Nie poddawaj się głosowaniu tylko dlatego, że nie rozumiesz! –

0

Użyj jQuery! To jest zajebiste.

Twój link może wyglądać następująco:

<a href="javascript:ToggleColumn();">Toggle My Column</a> 

JavaScript funkcja może wyglądać następująco:

function ToggleColumn() 
{ 
    $(".myColumn").toggle(); 
} 

Każda wygenerowana w żądanej kolumny będą musiały mieć klasę atrybut = „myColumn” więc twój javascript może go znaleźć. Aby to zrobić, można dodać element <ItemStyle /> do żądanej kolumny swojej DataGrid, tak:

<asp:TemplateColumn runat="server"> 
    <ItemStyle CssClass="myColumn" /> 
</asp:TemplateColumn> 

I wreszcie należy pamiętać, aby podać link do jQuery w pliku nagłówkowym gdzieś coś takiego:

<script src="/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script> 

Możesz download jQuery here.

+1

'kolumna' nie jest tak naprawdę HTML element, który możesz przełączać w ten sposób. – SolutionYogi

+0

@SolutionYogi: Pewnie, że tak! Selektor jQuery szuka klasy myColumn. Ten kod działa świetnie! :) – JerSchneid

+0

Niezupełnie. Co zrobi ASP.NET to umieszczenie klasy .myColumn na każdym TD dla tej kolumny. Tak więc poszczególne TD będą się włączać. Brzydka jak grzech, ale powinna działać. – Randolpho

-1

Moja osobista opinia to użycie JQuery.

Użyj selektorów, aby znaleźć kolumnę i dodaj styl "hidden: true". To jest czyste rozwiązanie JS.

-1

Użyj jquery, jak sugerowali inni ... selektor taki jak ten powinien to zrobić. To zasadniczo ukryć kolumna 3.

$('table.tableCSS tr').find('td:eq(2)').hide(); // eq(index)