2009-07-22 21 views
7

ASP.NETでGridviewsは親divコンテナを生成するテーブルを生成します。これは、生成されたdivにスタイルを付加する方法がないため、CSSレイアウトを壊す可能性があります。 divが生成されないようにする方法やスタイルを適用する方法はありますか?GridViewを含む空のdivを取り除く方法

これは、hereと尋ねられ、解決済みとマークされましたが、MSは、ページングと並べ替えの機能にdivが必要だと言っただけです。私がページングとソート機能を使いたい場合、自分のdivをその周りにラップしてスタイルを適用することはできないということを理解していますか?ありがとう

+2

"のGridViewが含まれている空のdiv" - ティー熙;-D –

+2

笑、あなたは正しい、それはすべての – angelo

+0

でも意味がありません私も解決なしで同じ状況にあります –

答えて

0

削除:

<asp:GridView ... CssClass="nameOfStyleClass" ... /> 

次にCSSクラスを定義します外側のdivを作成し、次にプレレンダリングイベントで新しいレンダリングされたhtmlをhtmltextwriteするか、これを行うためのユーザーコントロールまたはカスタムコントロールを作成します。

しかし、グリッドビューの機能を破る危険性がありますが、divを使用する機能を使用しないことがわかっている場合は、その機能を使用できなくなる可能性があります。

+0

それはうまくいくように聞こえるが、divを削除するとソート/ページングの機能が損なわれる可能性があります。私は、divにスタイルを適用するための方法は組み込まれておらず、まだページングとソートがあると思います。私はHTMLをつかんで、divにCSSクラスを追加しようとするかもしれません。ありがとう。 – angelo

0

asp:Panelの内部に配置し、テーブルが空の場合はパネルのVisibleプロパティをfalseに設定できます。

+1

ありがとうございますが、私はあなたが私の質問を誤解していると信じています。私はgridviewを隠そうとしていない。私は親コンテナとしてhtmlテーブル(グリッドビューが生成するマークアップ)の周りに生成される空のdivを取り除こうとしています。 – angelo

-3

あなたのグリッドビューに明示的なCssClassを定義して利用することができます。 、私はこれをやったことがないが、私は私の最初の推測は、あなたがそれをブラウザになる直前にレンダリングされたHTML出力をつかむことができだろう

.nameOfStyleClass 
{ 
    < Style stuff > 
} 
+0

問題は、私はテーブル上でクラスを使いたくないということです。表要素はdiv要素とは異なる動作をし、CSSを使用するのに苦労します。私ができるならば、divを使用したいと思う。ありがとう。 – angelo

+0

これは、周囲に自動生成されるdivではなく、gridviewをスタイルするだけです。 –

1

ここで同じ問題は、OMGのそれですだから厄介な。 IE6/7のレンダリングで、divをグリッドビューの一番上に置いたときにグリッチが発生する - 親DIVによって、2つの要素の間にスペースができます。

私は反射板を使用してGridViewのコードに掘って、問題を発見した:

Protected Friend Overrides Sub Render(ByVal writer As HtmlTextWriter) 
    Me.Render(writer, Not MyBase.DesignMode) 
End Sub 

をので、 'renderPanel' ==ないのdesignMode:

Private Sub Render(ByVal writer As HtmlTextWriter, ByVal renderPanel As Boolean) 
    If (Not Me.Page Is Nothing) Then 
     Me.Page.VerifyRenderingInServerForm(Me) 
    End If 
    Me.PrepareControlHierarchy 
    If renderPanel Then 
     Dim clientID As String = Me.ClientID 
     If Me.DetermineRenderClientScript Then 
      If (clientID Is Nothing) Then 
       Throw New HttpException(SR.GetString("GridView_MustBeParented")) 
      End If 
      Dim builder As New StringBuilder("__gv", (clientID.Length + 9)) 
      builder.Append(clientID) 
      builder.Append("__div") 
      writer.AddAttribute(HtmlTextWriterAttribute.Id, builder.ToString, True) 
     End If 
     writer.RenderBeginTag(HtmlTextWriterTag.Div) 
    End If 
    Me.RenderContents(writer) 
    If renderPanel Then 
     writer.RenderEndTag 
    End If 
End Sub 

がこれはレンダリングから呼び出されます。 DIVは、UpdatePanelでgridview ではない場合、ページングとソートに使用されます。私のサイトでは、すべてのGridViewsがUPしているプラ​​ス私の解決策は、以下に上記関数をオーバーライドすることだったので、彼らは、カスタムGridViewのクラスから継承されます:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     Me.PrepareControlHierarchy() 
     Me.RenderContents(writer) 
    End Sub 

他のソリューションからrenderメソッドをコピーすることができ必要に応じて変更しました。

これはHACKの匂いです。あなたは警告されていますが、ページング/ソートを使用していない場合はespで動作する可能性があります。

2

変更レンダリングせずに簡単な解決策:

私はそれが私のレイアウトを壊すためのGridViewによって生成されたdiv要素にスタイルを適用する必要があるので、私は「myContainerDiv」idを持つdiv要素を作成し、その中に私のGridViewを移動jQueryを使用していくつかのスタイルを適用します。

例:

$("#myContainerDiv > div").css("display", "inline"); 

Iは$(ドキュメント).ready(関数({}))でこのJavaScriptを置く;. UpdatePanelを使用する場合は、この特定のケースで使用する必要があるように、すべての非同期ポストバックでこの$()。css()を実行します。それがなければ、あなたのgridviewが含まれているupdatepanelを実行するとスタイルは失われます。しかし、私はこの$を実行する()CSSを()特定のUpdatePanelは、(すべてのすべてのすべての非同期ポストバックでこのjavascriptの命令を実行する必要)

例解雇されていない場合にのみ:。

<script type="text/javascript"> 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 

function EndRequestHandler(sender, args) { 
    if (args.get_error() == undefined && sender._updatePanelClientIDs != null && 
      sender._updatePanelClientIDs.length > 0 && sender._updatePanelClientIDs[0] == "<%= MyParticularUpdatePanel.ClientID %>") { 
      $("#myContainerDiv > div").css("display", "inline"); 
     } 
    } 

</script> 

を解決します!

ページ全体がそのようになります。

<script type="text/javascrcipt" src="jquery.js"></script> 

<script type="text/javascript">  

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 

function EndRequestHandler(sender, args) { 
    if (args.get_error() == undefined && sender._updatePanelClientIDs != null && 
      sender._updatePanelClientIDs.length > 0 && sender._updatePanelClientIDs[0] == "<%= MyParticularUpdatePanel.ClientID %>") { 
      $("#myContainerDiv > div").css("display", "inline"); 
     } 
    } 

</script> 

<asp:UpdatePanel runat="server" ID="MyParticularUpdatePanel" UpdateMode="Conditional" RenderMode="Inline"> 
<Triggers> 
// Your triggers here... 
</Triggers> 
<ContentTemplate> 
<div id="myContainerDiv" style="display:inline;"> 
    <asp:GridView runat="server" ID="MyGridView" AutoGenerateColumns="false" Height="150px" EmptyDataText="No data."> 
    <Columns> 
     <asp:BoundField DataField="ID" HeaderText="My ID" /> 
    </Columns> 
    </asp:GridView> 
</div> 
</ContentTemplate> 
</asp:UpdatePanel> 

私はメモ帳を使用して、それを書いたので、私が書いたように、このコードは正確にコンパイルするかどうか、私は知りません。

私の貧しい私の英語のために申し訳ありませんが、私はブラジル出身です。

Christophe Trevisani Chavey。 http://www.christophetrevisani.com

7

あなたは(あなたがしていることが表示されます)unstyledラッパーで立ち往生したが、スタイルを適用し、それをラッパーを与える、との組み合わせにあなたのスタイルを適用したいしている場合。無地のdivは、あなたが(例えば)を取り除きたいいくつかのパディングを持っている場合、これは、ASPXで:CSSのための

<div id="crushGvDiv"> 
<asp:GridView ... > 
</div> 

と、この:

div#crushGvDiv, div#crushGvDiv div { padding: 0; margin: 0; } 
+1

#crushGvDivの他の子divがある場合に備えて、もっと具体的にするためにdiv> crushGvDiv> div(>を使用)を使用しますが、偉大な答えです!私はそれを使用しています。 – SeanKendle

+0

細かい点を見直してもらうことを奨励してくれて、私はあまり使わない。 "子供の結合子"、そして "隣接する兄弟結合子"もそうです。 http://css-tricks.com/child-and-sibling-selectors/ – fortboise

0

私は、ブートストラップ応答を使用して、この同じ問題を抱えていましたGridViewコントロールを持つテーブル私は簡単に準備ができて関数に次の行を追加することで(一部はハック言うかもしれない)問題を解決することができました:

$("div.table-responsive > div").addClass('table-responsive'); 

これは、次のようなものになります:

<div class=table-responsive> 
    <div class=table-responsive> 
     <table ..... 

これはかなり動作するはずですまあ、それは完璧な解決策ではありません。

0

CSSクラス "gridViewWrapperFix"を使用した、最も簡単で最適なソリューションです。

ASPX:

<div class="gridViewWrapperFix"> 

    <asp:GridView> 
    <%--the full gridview would go here--%> 
    </asp:GridView> 

</div> 

CSS:

/* styles the div that gets auto generated around and asp.net gridview */ 

.gridViewWrapperFix > div { 
    padding: 0; 
    margin: 0; 
    border: 3px solid red; 
} 
関連する問題