2016-05-20 6 views
2

私はasp.net mvc-4 Webアプリケーションで作業しています。そして、私は私のかみそりビュー内の以下のWebGridを持っている私のビュー内: -どのように非表示の携帯電話のブートストラップクラスを使用して特定のasp.net WebGridColumnを非表示にすることができます

@{ 
var gridcolumns = new List<WebGridColumn>(); 

       gridcolumns.Add(new WebGridColumn() 
       { 
        ColumnName="OrderID", 
        Header = "", 
        Style="hidden-phone", 
        CanSort = false, 
        Format = 

       @<text> 

      @Html.ActionLink("Edit","Edit", "Order",new { id = item.OrderID },null) 

       </text> 
       }); 

//other columns goes here.. 
var grid = new WebGrid(
       canPage: true, 
       rowsPerPage: Model.PageSize, 
       canSort: true, 
       ajaxUpdateContainerId: "grid"); 

       grid.Bind(Model.Content, rowCount: Model.TotalRecords, autoSortAndPage: false); 
       grid.Pager(WebGridPagerModes.All); 

       @grid.GetHtml(htmlAttributes: new { id = "grid" }, // id for ajaxUpdateContainerId parameter 
     fillEmptyRows: false, 
     tableStyle: "table table-bordered table-hover", 


     mode: WebGridPagerModes.All, 
     columns: gridcolumns 

     ); 


} 

今私は小さなデバイス上WebGridColumns specif非表示にしたいです。上記のコードに示すように、私はウェブグリッド内部以下を定義している: -

Style="hidden-phone", 

今、この小さなデバイス(携帯電話)内部列の内容を非表示になり、それでも列ヘッダーが表示されます。小さな画面(電話)でWebGridを表示しているときに、本文列と比較してヘッダーの数が異なることになりました。

誰でもどのようにしてStyle="hidden-phone"を強制的に列の内容と列ヘッダーに適用できるかを説明できます。つまり、小さなサイズの画面の中でWebGridを表示しているときに、指定された列を非表示にすることはできますか? WebGridのStyleプロパティは指定された列ヘッダーに適用されないようですか?

+1

使用しているブートストラップのバージョン?あなたのビューで生成されたHTMLを投稿できますか? –

+0

@joint_ops私はブートストラップバージョン2を使用しています –

+0

divのコードの一部を "hiden-phone"クラスでラップしようとしましたか?そうですね:

@your razor markup

答えて

2

最も簡単な解決策を使用することにより、全くヘッダを非表示にするには、次のようになります。

displayHeader:false 

これは、WebGridのオブジェクトのオプションですが、あなたがそれを必要とするならば、唯一の解決策は、細胞数で列ヘッダーを非表示にするだろう:

$(function() { 
    $('#grid thead tr th:eq(0)').addClass('hidden-phone'); 
}) 

UPDATE

オクラホマので、あなたがあなたの電子のように列クラス隠された電話に追加することを前提としていますXAMPLEあなたはそのようなヘッダを対応する見つけることができます:

$(function() { 
    $('#grid tbody tr:first td.hidden-phone').each(function(index, td){ 
     $('#grid thead tr th:eq(' + index + ')').addClass('hidden-phone'); 
    }); 
}) 

提供される機能は、表の最初の行に目を通すと、クラス隠された電話を持つ細胞を検索します。次に、各セルに対して、対応するヘッダに同じクラスを追加します。

UPDATE#2

あなたは、AJAX呼び出し、あなたは少し私の例を変更する必要があり、その後の並べ替えを使用している場合。そして、AJAXリクエストへのコールバックとしてその関数名を渡す

function hideHeaders() { 
    $('#grid tbody tr:first td.hidden-phone').each(function (index, td) { 
     $('#grid thead tr th:eq(' + index + ')').addClass('hidden-phone'); 
    }); 
}; 

$(function() { 
    hideHeaders(); 
}) 

:まず機能を分離するために、私のJSコードを移動

var grid = new WebGrid(
    canPage: true, 
    rowsPerPage: 1, 
    canSort: true, 
    ajaxUpdateContainerId: "grid", 
    ajaxUpdateCallback: "hideHeaders"); 

お知らせajaxUpdateCallback:「hideHeaders」 - 今聞かせてそのラインWebGridはajaxリクエストが完了した後に呼び出される必要があります。

+0

私はこのアプローチに慣れていません。私はセル番号の代わりにラベルを定義してスクリプトを変更できるかどうかはわかりません。 - Address。私は、その中にAddressという単語を持つを削除するスクリプトを定義できますか?私は多くの場所でレンダリングされた同じWebグリッドを持ち、webgridには異なる数のヘッダーが含まれているため、セル番号に基づいて削除すると、webgridsのグローバルスクリプトを定義することができなくなります –

+1

@johnGあなたのニーズを満たすソリューションに近づけることを願っています。 – Lesmian

+0

私はあなたのスクリプトを次のようにしてみました: - $(function(){ $( "#grid tbody tr:最初のtd.hidden-phone")それぞれ(function(index、td) { alert(1); });しかし、hidden-phoneクラスは適用されませんでした。私は意図的にalter(1)を追加します。しかし、このアラートは1回だけ実行されます。アラートをフォローアラート(インデックス)として定義すると、定義されていないコンテンツが表示されるので、スクリプトがあなたの言われたように動作していないようです... –

-1

私は1つのコードスニペットを作成して確認してください。

私はテーブルの3列目をすべて無効にしました。

私はあなたに役立つと思います。

おかげ

$(function() { 
 
    debugger; 
 
    $('#grid tr').each(function(){ 
 
    $(this).find('th:eq(2)').hide(); 
 
    $(this).find('td:eq(2)').hide(); 
 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="grid"> 
 
    <tr> 
 
    <th>H1</th> 
 
    <th>H2</th> 
 
    <th>H3</th> 
 
    <th>H4</th> 
 
    </tr> 
 
    <tr> 
 
    <td>d1</td> 
 
    <td>d2</td> 
 
    <td>d3</td> 
 
    <td>d4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>d1</td> 
 
    <td>d2</td> 
 
    <td>d3</td> 
 
    <td>d4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>d1</td> 
 
    <td>d2</td> 
 
    <td>d3</td> 
 
    <td>d4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>d1</td> 
 
    <td>d2</td> 
 
    <td>d3</td> 
 
    <td>d4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>d1</td> 
 
    <td>d2</td> 
 
    <td>d3</td> 
 
    <td>d4</td> 
 
    </tr> 
 
</table>

+0

okありがとうございます。しかし、ヘッダを持つカラムで実行するようにスクリプトを変更することはできますか?現在のasp.netのWebグリッドでは次のようにヘッダーがレンダリングされます: - Address ..また、私の場合は、画面が小さすぎる場合にのみ列を非表示にする必要がありますが、これは "hidden-phone"ブートストラップクラスを追加することによって行うことができます。 –

+1

私たちはそれを行うことができます。画面の解像度に応じて列の非表示を要求している場合それは可能ですが、ヘッダーテキストの欄に応じて尋ねている場合は非表示にすることもできます。ちょうど私に正確なことを教えてください、そして私はそれに従ってコードを作成します。 –

+0

今私は私が私の元の質問にしたいことをすでに説明した場合私に知らせてください。私がしたいのは、小さなサイズの画面上でWebグリッドを表示するときに特定のWebグリッドの列を非表示にすることです。 Webgeidの列 "Style =" hidden-phone "内に次のブートストラップクラスを定義すると、テーブル本体内の関連する列は非表示になりますが、関連するヘッダーは小さなサイズの画面に表示され続けます。だから、もう一つの答えでは、Lesimanは関連するテーブルヘッダーに「隠し電話」ブートストラップクラスを動的に適用するスクリプトを提供しました。 –

関連する問題