ASP.NET新手需要掌握/详细帮助。 (截图也是)

时间:2009-03-26 15:48:44

标签: asp.net master-detail

我正在开始基本数据驱动的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>

1 个答案:

答案 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();
  }
}