我的客户项目有问题。
我有一个由ObjectDataSource填充的项目的ListView(lv1)。当您单击lv1行中的按钮时,我需要编写一个嵌套列表(lv2),按钮事件应获取数据,然后填充lv2。问题是我已经尝试过使用嵌套的ListView,但是lv2并未填充onclick。
<asp:ListView id="lv1" runat="server" DataSourceID="foo_ods" OnItemCommand="ListV_Proj_ItemCommand">
<LayoutTemplate>
<table>
<thead>
<tr>
<th>Someheader</th>
</tr>
</thead>
<tr id="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Button ID="btn_GetSubProj" Text="+" runat="server" CommandArgument='<%# Eval("Master") %>' CommandName="select" /></td>
<td>data for lv1</td>
</tr>
<tr>
<td>
<asp:ListView id="lv2" runat="server">
<ItemTemplate>some data</ItemTemplate>
</asp:ListView>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
隐藏代码
protected void ListV_Proj_ItemCommand(object sender, ListViewCommandEventArgs e)
{
DataTable subProTable = uWeb.Data.Project.List_Test(e.CommandArgument.ToString());
ListView subListV = (ListView)e.Item.FindControl("lv2");
subListV.DataSource = subProTable;
subListV.DataBind();
}
这是代码的基本结构。我不确定这是否是正确的方法。简而言之:
1)可以使用嵌套的ListView吗?如果是,我做错了什么? 2)有更好的方法吗? objectdatasource只能是静态的,子行仅应在单击按钮时获取(因此,在lv1绑定上不能如此)。
结果应该是一个列表,您可以单击一行,然后显示子行。而且由于数据量大,在单击按钮之前,不应从数据库中获取子行(与结构中的矩阵行相同)。
如果这篇文章比较乱,我有点紧张,很抱歉。随时告诉我是否需要详细说明。
答案 0 :(得分:1)
在按钮上没有CommandName
的情况下尝试。没有它,一切正常。但是有了它,您会收到错误“ ListView'lv1'引发了未处理的事件SelectedIndexChanging”。诸如“选择”之类的名称。 'delete','update'等保留给OnCommands
<asp:Button ID="btn_GetSubProj" Text="+" runat="server" CommandArgument='<%# Eval("Master") %>' />