2009-03-26 4 views
1

저는 기본 데이터 기반 ASP.NET 웹 폼 디자인을 사용하고 있습니다. 양식의 첫 번째 부분은 작동하지만 다음에해야 할 일을 모릅니다. 해고하는 데 사용하는 해당 요소에 내가 HTML 요소의 종류 마스터 목록에서 사용할 알고 도움이 필요 http://www.twitpic.com/2gnmrASP.NET 초보자를위한 마스터/세부 정보 도움말. (스크린 샷도)

, 어떤 이벤트/트리거 :

하면이 내가 지금까지 만든 어떤 스크린 샷을 참조하십시오 "이 선택된 항목에 대한 하위 레코드 가져 오기"시퀀스?

또한 ListView는 마스터 목록을 표시하는 올바른 방법일까요? 현재로서는 편집 기능을 제공하지 않으려 고합니다. 나는 나중에 그걸 알게 될 것입니다.

내가하고있는 것처럼 listview를 직접 코딩하는 대신 다른 ASP.NET 데이터 컨트롤을 사용해야합니까?

저는 각 고객 이름 옆에 실제 "선택"링크 항목이 보이지 않기를 바래요. 고객 이름을 클릭 할 링크로 지정합니다.

그래서 내 코드에서 ListView를 통해 CustomersWithOpenOrders 목록을 볼 수 있습니다. 하지만 정적 목록 일 뿐이므로 회사 이름 레이블을 클릭 할 수있게하려면 어떻게해야합니까? 그리고 자식 레코드를 가져 오기 위해 일부 코드 숨김으로 다시 되돌릴 필요가있는 요소는 무엇입니까? 나는 이미 전달 된 CustomerNumber에 대한 자식 레코드를 DataTable에 가져 오는 코드 숨김 메소드가 있으며,이를 자식 레코드의 격자 또는 목록 뷰에 바인딩하는 방법을 알고있을 것이라고 생각하지만, Master ListView에서 UI 양식의 메서드에 대한 CustomerNumber입니다.

<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> 

답변

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(); 
    } 
} 
+0

dataItem.DataItem을 고객 유형으로 캐스팅 할 때까지 계속 작업하고 있습니다. 형식화 된 데이터 집합이나 개체를 사용하지 않고 SQL 명령 호출에서 일반 데이터 집합을 사용하고 있습니다. 그렇다면 LinkButton의 CommandArgument를 사용하여 CustNo를 설정하면 어떻게해야합니까? – MattSlay

+0

디버거에서 봅니다. 당신은 DataRow 또는 DataViewRow – bendewey

+0

로 캐스팅해야 할 수도 있습니다 그것은 디버거에서 null입니다. 마지막으로 각 LinkButton에 대해 CommandArgument를 CustId와 동일하게 사용했습니다. string SelectedCustomerId = e.CommandArgument.ToString(); this.lvOpenOrders.DataSource = GetOpenOrdersByCustomer (SelectedCustomerId); this.lvOpenOrders.DataBind(); 부정 행위? – MattSlay