2009-03-26 2 views
1

Я просто работаю с базовыми данными, разработанными для веб-форм ASP.NET. У меня есть первая часть формы, но я не знаю, что делать дальше.Помощь мастера/детали, необходимая для новичков ASP.NET. (скриншот тоже)

Пожалуйста, смотрите этот скриншот того, что я создал до сих пор: http://www.twitpic.com/2gnmr

мне нужна помощь, зная, какой HTML элемент для использования в главном списке, и какие события/триггер на этом элементе, чтобы использовать, чтобы выстрелить последовательность «получить дочерние записи для этого выбранного элемента»?

Кроме того, является ли ListView даже правильным способом представления основного списка? В настоящее время я не пытаюсь предоставить какие-либо функции редактирования; Я доберусь до этого позже, я думаю.

Должен ли я использовать какой-то другой элемент управления данными ASP.NET, а не ручное кодирование списка, как я делаю?

Я не хочу видеть фактическую позицию ссылки «Выбрать» рядом с каждым именем клиента (что выглядит тупо). Я хочу, чтобы имя Клиента было ссылкой на клик.

Итак, вы можете увидеть в моем коде ниже, что у меня есть ListView, чтобы представить список CustomersWithOpenOrders. Но это всего лишь статический список, поэтому как сделать ярлык «Название компании» доступным для кликов, и что еще мне нужно, чтобы он смог вернуться к некоторому коду для получения дочерних записей. У меня уже есть метод кода для получения дочерних записей для переданного CustomerNumber в DataTable, и я думаю, что я знаю, как связать это с сеткой или списком для дочерних записей, но я не знаю, как передать CustomerNumber из главного ListView в метод из формы пользовательского интерфейса.

<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 на тип клиента. Я не использую типизированные DataSets или объекты, а простой DataSet из вызова команды SQL. Итак, как я могу получить CustNo, если я установил его с помощью CommandArgument в LinkButton? – MattSlay

+0

Просмотрите его в отладчике. Возможно, вам придется использовать его как DataRow или DataViewRow. – bendewey

+0

Это значение null в отладчике. Я, наконец, просто использовал CommandArgument, равный CustId для каждого LinkButton, затем: string SelectedCustomerId = e.CommandArgument.ToString(); this.lvOpenOrders.DataSource = GetOpenOrdersByCustomer (SelectedCustomerId); this.lvOpenOrders.DataBind(); Обман? – MattSlay

Смежные вопросы