单击按钮时的嵌套列表视图数据绑定
Nested listview databinding on button click
我有一个客户项目的问题。
我有一个由 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)有更好的方法吗?只有静态是对象数据源,子行只能在单击按钮时获取(因此不能在 lv1 绑定上获取)。
结果应该是一个列表,您可以单击其中的一行然后显示子行。并且由于数据量,在单击按钮之前,不应从数据库中获取子行(在结构上与主行相同)。
How it should work
我有点压力,如果 post 有点乱,我很抱歉。如果我需要详细说明,请随时告诉我。
尝试在按钮上不使用 CommandName
。没有它一切正常。但是有了它你会得到错误"he ListView 'lv1' raised event SelectedIndexChanging which wasn't handled"。像 'select' 这样的名字。 'delete'、'update' 等为 OnCommands
保留
<asp:Button ID="btn_GetSubProj" Text="+" runat="server" CommandArgument='<%# Eval("Master") %>' />
我有一个客户项目的问题。
我有一个由 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)有更好的方法吗?只有静态是对象数据源,子行只能在单击按钮时获取(因此不能在 lv1 绑定上获取)。
结果应该是一个列表,您可以单击其中的一行然后显示子行。并且由于数据量,在单击按钮之前,不应从数据库中获取子行(在结构上与主行相同)。
How it should work
我有点压力,如果 post 有点乱,我很抱歉。如果我需要详细说明,请随时告诉我。
尝试在按钮上不使用 CommandName
。没有它一切正常。但是有了它你会得到错误"he ListView 'lv1' raised event SelectedIndexChanging which wasn't handled"。像 'select' 这样的名字。 'delete'、'update' 等为 OnCommands
<asp:Button ID="btn_GetSubProj" Text="+" runat="server" CommandArgument='<%# Eval("Master") %>' />