单击行的选择按钮后,该行与网格视图的其余部分之间将显示一个网格视图.可能

本文关键字:网格 视图 显示 可能 一个 之间 按钮 选择 余部 单击 | 更新日期: 2023-09-27 18:30:43

我想让用户单击选择按钮,比如说,400行网格视图的第250行。当他们单击该行时,该行下方将显示另一个 3x12 的网格视图,然后其他 150 行将显示在该行下方。这可能吗?我想我可以创建一个完整的另一个div,它将有三个网格视图,这些网格视图根据 <= 输出并>所选行的索引。

它的开头为:

网格视图行 1-400

那么在选择第 350 行之后是:

网格视图行 1-350


第 350 行信息的网格视图


网格视图行 351-400。

单击行的选择按钮后,该行与网格视图的其余部分之间将显示一个网格视图.可能

这绝对是可能的,但我会使用 ListViewDataList 作为您的父容器,因为使用 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 中的 LinkButton/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();
            }  
        }
    }
}

一种方法是:

在主网格的行命令上:

  • 为网格创建 C# 代码将在 GridView grd = new GridView();

  • 像绑定任何其他网格一样绑定此实例

  • 添加来自主网格当前行的控件,应该是这样的

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

我现在这里没有VS,但我想你可以明白,我一直使用这种方法