1

次の3つのネストの設定を使用してセットアップします。RepeaterはCollapsiblePanelExtenders(動作する)を使用し、それぞれGridViewを含みます。これらのそれぞれには、別のCollapseiblePanelExtenderによって制御される別のGridViewが含まれています。これらの内側のCollapsiblePanelsは、clientStateをTrueに設定した場合にのみ、展開状態または折りたたみ状態を効果的に表示します。ただし、期待どおり効果的に拡大または縮小されるわけではありません。すべてが動的に束縛されています。ネストされたRepeaterとGridviewセットアップのCollapsiblePanelExtenderは機能しません

ここ

マークアップです...

<asp:Repeater ID="cat_repeater" runat="server"> 
    <ItemTemplate> 
    <asp:CollapsiblePanelExtender id="cat_cpExt" runat="server" TargetControlID="cat_pnl" CollapsedSize="0" Collapsed="false" CollapsedImage="collapsed.png" ExpandedImage="expanded.png" ExpandControlID="cpControl_pnl" CollapseControlID="cpControl_pnl" TextLabelID="cpControl_lbl" ImageControlID="cpControl_img" CollapsedText='<%#configCPText(eval("Title"), False)%>' ExpandedText='<%#configCPText(eval("Title"), True) %>' /> 
    <asp:Panel ID="cpControl_pnl" runat="server" Visible='<%#itemVisible(eval("ID"), "Recipients", "CategoryID") %>' CssClass="CPanelStyle"> 
     <asp:Image ID="cpControl_img" runat="server" ImageUrl="expanded.png" /> 
     <asp:Label ID="cpControl_lbl" runat="server" Text='<%#configCPText(eval("Title"), True) %>' CssClass="CPanelText" /> 
    </asp:Panel> 
    <asp:Panel ID="cat_pnl" runat="server"> 
     <asp:GridView ID="recipients_gv" runat="server" CssClass="GVStyle" HeaderStyle-CssClass="GVHeaderStyle" RowStyle-CssClass="GVItemStyle" AutoGenerateColumns="false" GridLines="none" AllowPaging="false"> 
     <Columns> 
      <asp:TemplateField HeaderText="Name" SortExpression="Last Name" ItemStyle-CssClass="GVNameStyle"> 
      <ItemTemplate> 
       <asp:Literal id="name_lit" runat="server" text='<%#formatNameText(eval("FirstName"), eval("LastName")) %>' /> 
      </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Gifts" ItemStyle-Width="500px"> 
      <ItemTemplate> 
       <asp:CollapsiblePanelExtender id="gifts_cpExt" runat="server" TargetControlID="gifts_pnl" CollapsedSize="0" Collapsed="true" CollapsedImage="collapsed.png" ExpandedImage="expanded.png" ExpandControlID="cpControl_pnl2" CollapseControlID="cpControl_pnl2" TextLabelID="cpControl_lbl2" ImageControlID="cpControl_img2" CollapsedText='<%#configGiftsCPText(eval("ID"), True)%>' ExpandedText='<%#configGiftsCPText(eval("ID"), False) %>' /> 
       <asp:Panel ID="cpControl_pnl2" runat="server" Visible='<%#itemVisible(eval("ID"), "Gifts", "RecipientID") %>'> 
       <asp:Image ID="cpControl_img2" runat="server" ImageUrl="collapsed.png" /> 
       <asp:Label ID="cpControl_lbl2" runat="server" Text='<%#configGiftsCPText(eval("ID"), False) %>' /> 
       </asp:Panel> 
       <asp:Panel ID="gifts_pnl" runat="server"> 
       <asp:GridView ID="gifts_gv" runat="server" DataKeyNames="ID" RowStyle-CssClass="GVInnerItemStyle" HeaderStyle-CssClass="GVInnerHeaderStyle" Gridlines="None" AutoGenerateColumns="false" AllowPaging="false" Width="475px"> 
        <Columns> 
        <asp:TemplateField ItemStyle-CssClass="GVInnerButtonItemStyle" HeaderText="Description"> 
         <ItemTemplate> 
         <asp:LinkButton ID="gift_lBtn" runat="server" Text='<%#eval("Description") %>' CommandName="Select" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Complete" ItemStyle-Width="50px"> 
         <ItemTemplate> 
         <asp:CheckBox ID="giftComplete_cbx" runat="server" Checked='<%#eval("Complete") %>' /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        </Columns> 
       </asp:GridView> 
       </asp:Panel> 
      </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     </asp:GridView> 
    </asp:Panel> 
    <br /> 
    </ItemTemplate> 
</asp:Repeater> 

...そして、ここにすべてをバインドするコードは次のとおりです。

Protected Sub bindCategories() 

    Try 
     oCmd.Connection = oConn 
     oCmd.CommandType = CommandType.Text 

     strSQL = "SELECT * FROM Categories" 

     oCmd.CommandText = strSQL 
     oDA.SelectCommand = oCmd 

     oDA.Fill(oDTbl) 

     cat_repeater.DataSource = oDTbl 
     cat_repeater.DataBind() 

     For i As Integer = 0 To oDTbl.Rows.Count - 1 


      oCmd.Parameters.Clear() 
      inner_dTbl.Clear() 

      strSQL = "SELECT *, Title FROM Recipients INNER JOIN Categories on Recipients.CategoryID = Categories.ID WHERE CategoryID = @CategoryID ORDER BY LastName" 

      oParam = New SqlParameter 
      oParam.ParameterName = "CategoryID" 
      oParam.SqlDbType = SqlDbType.Int 
      oParam.Value = oDTbl.Rows(i)("ID") 
      oCmd.Parameters.Add(oParam) 

      oCmd.CommandText = strSQL 
      oDA.SelectCommand = oCmd 

      oDA.Fill(inner_dTbl) 

      Dim gv As GridView = CType(cat_repeater.Items(i).FindControl("recipients_gv"), GridView) 
      gv.DataSource = inner_dTbl 
      gv.DataBind() 

      For j As Integer = 0 To inner_dTbl.Rows.Count - 1 

       oCmd.Parameters.Clear() 
       gifts_dTbl.Clear() 

       strSQL = "SELECT * FROM Gifts WHERE RecipientID = @RecipientID ORDER BY Description" 

       oParam = New SqlParameter 
       oParam.ParameterName = "RecipientID" 
       oParam.SqlDbType = SqlDbType.Int 
       oParam.Value = inner_dTbl.Rows(j)("ID") 
       oCmd.Parameters.Add(oParam) 

       oCmd.CommandText = strSQL 
       oDA.SelectCommand = oCmd 

       oDA.Fill(gifts_dTbl) 

       Dim inner_gv As GridView = CType(gv.Rows(j).FindControl("gifts_gv"), GridView) 
       inner_gv.DataSource = gifts_dTbl 
       inner_gv.DataBind() 

       Dim cpExt As CollapsiblePanelExtender = CType(gv.Rows(j).FindControl("gifts_cpExt"), CollapsiblePanelExtender) 
       cpExt.Collapsed = True 
       cpExt.ClientState = True 

      Next 

     Next 
    Catch ex As Exception 
     Throw ex 
    End Try 

End Sub 

私は2レベルのネストされたのGridViewでCollapsiblePanelExtendersを成功裏に使用しました前もって問題なくセットアップし、clientStateを設定する必要はありません。しかし、前にリピータでCollapsiblePanelExtendersを使用するときは、clientStateを指定する必要がありました。

このエクステンダがこの3レベルのネスト化された設定で機能しない理由については、

答えて

0

それはすべてそのロジックを動作させるためにポストバックを必要とするのでこれは必須です理由があるように見えます:

if (this.SupportsClientState) { 
    ScriptManager.RegisterHiddenField(this, this.ClientStateFieldID, this.SaveClientState()); 
    this.Page.RegisterRequiresPostBack(this); 
} 

これはAjaxControlToolkit空間でpublic class ScriptControlBaseからです。

これをUpdatePanelでラッピングしていますか?リピータでCPEを使用するためにポストバックが発生しますか?私はリピーターでCPEをやろうとして以来、しばらくしていましたが、私はこの時点でコードをチェックしてビルドするのではありません。

クライアント側で完全に何かを使用できず、javascriptを使用してこれらを展開/折りたたむことができない理由はありますか?これらが拡張されると、動的にデータをロードしていますか?

+0

現在、リピータCPEでポストバックを行っていますか。 – jcolebrand

+0

私はこの時点でUpdatePanelに何も置いていません(追加する予定のさらなる機能のために、少なくとも内部のGridViewを1つにまとめようとしていました)。リピータでCPEを使用してもポストバックは発生しません。 CPEはポストバック対応です。私のコードに示されているように、私のすべてのデータは、CPEを利用してコントロールに動的に読み込まれます。私はCPEのクライアント側のメソッドを使ってJavaScriptのアプローチを試みることができました。私は明日それを試してみましょう。 – Zogglet

+0

そうしないと、jQueryを使用してそのIDを切り替えてみることを見てください。しかしそれは難しいかもしれません。私はここで私にpingをしたいと思うと、私はあなたがオンラインであなたと会うことができるかどうかを見ることができます([so] chatroomsで?)。私は米国の中央時間です(GMT - 6ええ?)。私ができるところでデバッグするのを助けてくれてうれしい。 – jcolebrand

関連する問題