我想让用户点击400行gridview的第250行的选择按钮。当他们点击它时,然后另一个3x12的网格视图出现在该行下面,那么其他150行将出现在该行下方。这是可能吗?我想我可以创建一个完整的其他div,它将有三个gridview输出,具体取决于< =和>所选行的索引。
以:
开头Gridview行1-400
然后选择第350行后:
Gridview第1-350行
第350行信息的网格视图
Gridview行351-400。
答案 0 :(得分:1)
这绝对有可能,但我会使用ListView
或DataList
作为您的父容器,因为使用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();
}
}
}
}
答案 1 :(得分:0)
一种方法是:
在主网格的rowcommand上:
为网格创建c#代码将在GridView grd = new GridView();
像任何其他网格一样绑定此实例
从主网格当前行添加控件,应该类似
e.Cells[0].Controls.Add(grd);
我现在没有VS,但我想你可以得到这个想法,我一直都在使用这种方法