我正在开始基本数据驱动的ASP.NET webforms设计。我有一个表单的第一部分工作,但我不知道下一步该做什么。
请参阅到目前为止我创建的屏幕截图:http://www.twitpic.com/2gnmr
我需要帮助知道在主列表中使用什么类型的HTML元素,以及该元素上用于触发“获取此选定项目的子记录”序列的事件/触发器?
另外,ListView甚至是呈现主列表的正确方法吗?这时,我不是想提供任何编辑功能;我想,我会稍后再说。
我应该使用其他一些ASP.NET数据控件,而不是像我一样手工编写列表视图吗?
我不希望在每个客户名称旁边看到一个实际的“选择”链接项(看起来很傻)。我希望客户名称成为点击链接。
因此,您可以在下面的代码中看到我有一个ListView来显示CustomersWithOpenOrders的列表。但是,它只是一个静态列表,所以我如何使公司名称标签可点击,以及我需要还有什么能够让它回到一些代码隐藏以获取子记录。我已经有了一个代码隐藏方法来将传入的CustomerNumber的子记录转换为DataTable,我想我会知道如何将它绑定到子记录的网格或列表视图,但我不知道如何通过CustomerMumber,从主ListView到UI表单中的方法。
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<table cellpadding="2" border="0" ID="tbl1" runat="server">
<tr id="Tr1" runat="server" class="lvHeader">
<th id="Th1" runat="server">Customer</th>
</tr>
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr id="Tr2" runat="server">
<td>
<asp:Label ID="label2" class="FirstLine" runat="server" Text='<%# Eval("company") %>' />
<br />
<div class="SecondLine">
<asp:Label ID="labelCustNo" runat="server" Text='<%# Eval("custno") %>'/>
<asp:Label runat="server" Text='Ph: '></asp:Label>
<asp:Label ID="label3" runat="server" Text='<% # Eval("phone") %>' />
</div>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
答案 0 :(得分:2)
我个人没有发现ListView无法解决我的需求的情况。如果要创建客户选择样式列表,可以使用链接按钮进行绑定。
<asp:ListView runat="server" id="CustomersList" ItemCommand="CustomersList_ItemCommand">
<LayoutTemplate>
<table cellpadding="2" border="0" ID="tbl1" runat="server">
<tr id="Tr1" runat="server" class="lvHeader">
<th id="Th1" runat="server">Customer</th>
</tr>
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr id="Tr2" runat="server">
<td>
<asp:LinkButton ID="link1" class="FirstLine" runat="server" Text='<%# Eval("company") %>' CommandName="Select" />
<br />
<div class="SecondLine">
<asp:Label ID="labelCustNo" runat="server" Text='<%# Eval("custno") %>'/>
<asp:Label runat="server" Text='Ph: '></asp:Label>
<asp:Label ID="label3" runat="server" Text='<% # Eval("phone") %>' />
</div>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:ListView runat="server" ID="OrderList">
<!-- Child Rows implementation -->
</asp:ListView>
然后您需要将事件绑定到ListView.ItemCommand。
protected void CustomersList_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName = "Select")
{
if (e.Item.ItemType != ListViewItemType.DataItem) return;
var dataItem = e.Item as ListViewDataItem;
if (dataItem == null) return;
var customer = dataItem.DataItem as Customer;
if (customer == null) return;
this.OrdersList.DataSource = GetChildRecords(customer.ID);
this.OrdersList.DataBind();
}
}