1

我只是在进行基本数据驱动的 ASP.NET 网络表单设计。我有表格的第一部分工作,但我不知道下一步该做什么。

请看我到目前为止创建的截图:http: //www.twitpic.com/2gnmr

我需要帮助了解在主列表中使用哪种 HTML 元素,以及该元素上的什么事件/触发器用于触发“获取此选定项目的子记录”序列?

此外,ListView 甚至是呈现主列表的正确方法吗?目前,我不想提供任何编辑功能;我想我稍后会谈到。

我应该使用其他一些 ASP.NET 数据控件而不是像我正在做的那样手动编码列表视图吗?

我不想在每个客户名称旁边看到一个实际的“选择”链接项(看起来很傻)。我希望客户名称成为单击的链接。

因此,您可以在下面的代码中看到,我有一个 ListView 来显示 CustomersWithOpenOrders 的列表。但是,它只是一个静态列表,所以我如何使公司名称标签可点击,我还需要什么让它回火到一些代码隐藏来获取子记录。我已经有一个代码隐藏方法可以将传入的 CustomerNumber 的子记录获取到 DataTable 中,我想我知道如何将它绑定到子记录的网格或列表视图,但我不知道如何传递CustomerNumber 从主 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>
4

1 回答 1

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();
  }
}
于 2009-03-26T16:04:50.437 回答