3

私は自分のページにこれを実装する方法を高低で検索しました。ページのコンパイル時に動的に生成されるネストされたグリッドビューの並べ替えとネストを可能にするトップレベルのグリッドビューがあるため、ユーザーコマンドで非表示から表示に切り替えることができるダイナミックhtmldiv内にあるネストされたグリッドビューの数が「x」になります。私が抱えている問題は、divを折りたたむ/ポストバックを発生させることなく、これらのネストされたグリッドビューでの並べ替えを許可する方法を理解できないことです。

以下は、マスターグリッドビュー(gvSalesDiv)とネストされたグリッドビュー(gvTheDivisionCustomers)がasp.netでどのように生成されるかを示しています。

    <asp:GridView ID="gvSalesDiv" AllowSorting="true" onsorting="GridView1_Sorting" runat="server" GridLines="Both" OnRowDataBound="gvOrderLineDetail_RowDataBound" AutoGenerateColumns="False"
        Width="100%" Height="210px" BackColor="WhiteSmoke" AlternatingRowStyle-BackColor="#DADDE2"
        HeaderStyle-Font-Size="Medium"  Visible="true">
        <Columns>
        <asp:TemplateField HeaderText="Toggle Detail">
                    <ItemTemplate>
                        <a href="javascript:switchViews('div<%# Eval("SalesDivision") %>');">

                        <img id="imgdiv<%# Eval("SalesDivision") %>" alt="toggle"  border="0"
                         src="/salesconsole/toggle-off.png" />
                        </a>                      

                    </ItemTemplate>
                    </asp:TemplateField>

        <asp:BoundField DataField="SalesDivision"  HeaderText="Sales Division">

                <ItemStyle  Font-Bold="True" ForeColor="CornflowerBlue" HorizontalAlign="Center"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField DataField="LastDay" SortExpression="LastDay" DataFormatString="{0:C}" HeaderText="Last 24 Hours" >


                </asp:BoundField>
                <asp:BoundField DataField="LastWeek" SortExpression="LastWeek" DataFormatString="{0:C}" HeaderText="Last 7 Days" >

                </asp:BoundField>
                <asp:BoundField DataField="Last30Days" SortExpression="Last30Days" DataFormatString="{0:C}" HeaderText="Last 30 Days" >

                </asp:BoundField>
                <asp:BoundField DataField="Last3Months" SortExpression="Last3Months" DataFormatString="{0:C}" HeaderText="Last 3 Months" >

                </asp:BoundField>
                <asp:BoundField DataField="Last6Months" SortExpression="Last3Months" DataFormatString="{0:C}" HeaderText="Last 6 Months" >

                </asp:BoundField>
                <asp:BoundField DataField="LastYear" SortExpression="LastYear" DataFormatString="{0:C}" HeaderText="Last Year" >

                </asp:BoundField>
                <asp:TemplateField>
                    <ItemTemplate>
                                 <tr>
                                 <td colspan="100">     
                             <div id="div<%# Eval("SalesDivision") %>" style="display:none;position:relative;left:25px;" >

         <h3 title="<%# Eval("SalesDivision") %> Sales"><%# Eval("SalesDivision") %> Sales Breakdown</h3>

        <asp:GridView ID="gvTheDivisionCustomers" AllowSorting="true" onsorting="GridView2_Sorting" BackColor="WhiteSmoke" AlternatingRowStyle-BackColor="#DADDE2"
          Width="100%" 
        AutoGenerateColumns="false" runat="server">
        <Columns>
        <asp:TemplateField HeaderText="Show More Detail">
                    <ItemTemplate>
                       <a href="sales-customers-detail.aspx?CustomerID=<%# Eval("CustomerID") %>&CustomerName=<%# Eval("CustomerName") %>" target="_blank" style="color:Blue; text-decoration:underline"> More Details
                        </a>                      

                    </ItemTemplate>
                    </asp:TemplateField>

        <asp:BoundField DataField="CustomerID" HeaderText="ID"/>
        <asp:BoundField DataField="CustomerName" HeaderText="Name"  />
        <asp:BoundField DataField="Last24Hours" HeaderText="Last 24 Hours" SortExpression="LastDay" DataFormatString="{0:C}"  />
        <asp:BoundField DataField="Last7Days" HeaderText="Last 7 Days" SortExpression="Last7Days" DataFormatString="{0:C}"  />
       <asp:BoundField DataField="Last30Days" HeaderText="Last 30 Days" SortExpression="Last30Days" DataFormatString="{0:C}"  />
       <asp:BoundField DataField="Last3Months" HeaderText="Last 3 Months" SortExpression="Last3Months" DataFormatString="{0:C}"  />
       <asp:BoundField DataField="Last6Months" HeaderText="Last 6 Months" SortExpression="Last6Months" DataFormatString="{0:C}"  />
       <asp:BoundField DataField="LastYear" SortExpression="LastYear" HeaderText="Last Year" DataFormatString="{0:C}" />

       </Columns>


        </asp:GridView>

                               </div>    
                                 </td></tr>    
                              </ItemTemplate>

                                            </asp:TemplateField>  
        </Columns>
        </asp:GridView>

Page_Loadにマスターグリッドビューを設定すると、OnRowDataBoundメソッドを使用してネストされたグリッドビューが作成されます。マスターグリッドビューの並べ替え方法もありますが、これも問題なく機能します。以下は、ネストされたグリッドビューのOnSortingメソッドです。これは、私が立ち往生している場所です...このオブジェクトにアクセスできません

    protected void GridView2_Sorting(Object sender, GridViewSortEventArgs e)
{
    // TO DO : Sort the nested gridview....All I can get at is the sort expressions or
    cast the sender into a gridview but even then I wouldn't know the correct SQL query to bind with unless I knew which 'div' I was in... 

}
4

2 に答える 2

2

つまり、基本的には、並べ替え方法のクエリを作成できる ID または何かを探していると言えますか? それが正しければ、解決策を見つけることができます。次のように、最初の gridviews(gvSalesDiv) ItemTemplate 内に新しいラベルを配置します。

 <asp:Label ID="lblID" runat="server" Text='<%# Bind("Id") %>'></asp:Label>

コードビハインドでは、これを見つけることができます:

Label lblID = (Label)((GridView)sender).NamingContainer.FindControl("lblID");

それがうまくいくことを願っています!

于 2013-03-05T11:58:02.393 に答える
0

グリッドビューが存在する親divを取得する方法を探している場合は、次を使用できます。

まず、送信者をグリッドビューにキャストしてから、html要素を作成してグリッドビューの親にキャストする必要があります。このような:

    Dim test As Button = CType(sender, Button)
    Dim div As HtmlGenericControl
    div = CType(test.Parent, HtmlGenericControl)
    Dim t As String = test.ID

この例では、送信者をボタンにキャストしていますが、これは簡単に変更できます。この例では、「ru​​nat = "server"」を使用して、サーバーでdivを実行する必要があります。サーバー側で作成したくない場合は、キャスト方法をHTMLGenericControlからContentPlaceHolderに変更できます。これが役立つか、さらに情報が必要かどうかをお知らせください。

于 2013-03-05T11:48:48.630 に答える