0

たとえば、400行のグリッドビューの250行目の選択ボタンをクリックしてもらいたいのですが。それをクリックすると、3x12の別のグリッドビューがその行の下に表示され、次に150個の他の行がその下に表示されます。これは可能ですか?選択した行のインデックスである<=および>に応じて出力される3つのグリッドビューを持つ他のdiv全体を作成できると思います。

それは次のように始まります:

Gridview行1〜400

次に、行350が選択された後、次のようになります。

グリッドビューの行1〜350


行350情報の​​グリッドビュー


グリッドビューの行351〜400。

4

2 に答える 2

1

それは間違いなく可能ですが、代わりにListVieworDataListを親コンテナーとして使用しGridViewます。これはあなたを正しい道に導くはずです:

<asp:ListView ID="lstOuterList" runat="server" DataKeyNames="ID, OtherColumn">
    <LayoutTemplate>
        <table width="100%">
            <asp:PlaceHolder runat="server" ID="itemPlaceHolder" />
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td><asp:LinkButton ID="LinkButton1" runat="server" Text="Expand" OnCommand="LinkButton1_Command" CommandArgument='<%#Container.DisplayItemIndex%>'></asp:LinkButton></td>
            <td><%#Eval("Value")%></td>
            <td><%#Eval("OtherValue")%></td>
            <td><%#Eval("OtherOtherValue")%></td>
        </tr>
        <asp:PlaceHolder ID="plcInnerList" runat="server">
            <asp:ListView ID="lstInnerList" runat="server" Width="100%">
                <LayoutTemplate>
                    <tr>
                        <td colspan="4">                                
                            <div style="padding:20px;background-color:#fffeee;">
                                <table width="100%">
                                    <asp:PlaceHolder runat="server" ID="itemPlaceHolder" />
                                </table>
                            </div>
                        </td>                        
                    </tr>
                </LayoutTemplate>   
                <ItemTemplate> 
                    <tr>                       
                        <td><%#Eval("Value")%></td>
                        <td><%#Eval("OtherValue")%></td>
                        <td><%#Eval("OtherOtherValue")%></td>  
                    </tr>                         
                </ItemTemplate>
            </asp:ListView>
        </asp:PlaceHolder>
    </ItemTemplate>        
</asp:ListView>

ユーザーが DataList1 の LinkBut​​ton/Button をクリックすると、次のようになります。

protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    //pass index of item in command argument
    var itemIndex = Convert.ToInt32(e.CommandArgument);      

    //find the pnlChildView control
    var innerPlaceHolder = lstOuterList.Items[itemIndex].FindControl("plcInnerList") as PlaceHolder;
    if (innerPlaceHolder != null)
    {
        innerPlaceHolder.Visible = !innerPlaceHolder.Visible;          
        if (innerPlaceholder.Visible)
        {
            var innerList = innerPlaceHolder.FindControl("lstInnerList") as ListView;
            if (innerList != null)
            {
                //the id to retrieve data for the inner list
                int keyValue = (int)lstOuterList.DataKeys[itemIndex]["ID"];

                //bind the list using DataList1 data key value
                innerList.DataSource = new DataTable("DataSource"); //your datasource
                innerList.DataBind();
            }  
        }
    }
}
于 2012-04-10T20:31:22.423 に答える
0

1つの方法は次のとおりです。

メイン グリッドの行コマンド:

  • 内部にグリッド用の C# コードを作成します。 GridView grd = new GridView();

  • このインスタンスを他のグリッドと同様にバインドします

  • メイングリッドの現在の行からコントロールを追加すると、次のようになります

    e.Cells[0].Controls.Add(grd);
    

私は今ここにVSを持っていませんが、あなたはアイデアを得ることができると思います.私はいつもこのアプローチを使用しています.

于 2012-04-10T18:09:11.640 に答える