2016-01-30 5 views
0

VS 2013, ASP.NET 3.5 VB.NETModalPopupExtender теряет динамически добавлены строки таблицы на кнопку мыши

страницы имеет несколько элементов управления ModalPopupExtender для различных всплывающих окон. Одно из этих всплывающих окон заполняет таблицу CheckBoxControls и описания для продаваемых товаров.

Код страницы:

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %> 
    [snip] 
    <ajax:ModalPopupExtender 
      runat="server" 
      ID="mpeUpsell" 
      popupControlID="pUpsell" 
      CancelControlID="bGoBack" 
      BackgroundCssClass="custBackground" 
      PopupDragHandleControlID="phDragUpsell" 
      TargetControlID="bHidden" 
      Enabled="True" /> 
     <asp:Panel runat="server" ID="pUpsell" style="display:none;"> 
      <div runat="server" class="custPopup"> 
       <div runat="server" id="phDragUpsell"> 
        <h3 style="text-align:center;"> 
         <asp:Label 
          ID="lUpsellHdr" 
          runat="server" 
          Text="Check Out these Add-Ons" /> 
        </h3> 
       </div> 
       <asp:Label 
        ID="lAddOnsText" 
        runat="server" /> 
[snip] 
       <asp:Table 
        ID="tItems" 
        runat="server" 
        style="border: 1px solid black;"> 
[snip]       <asp:Button ID="bNext" runat="server" Text="Next ---&gt;" /> 
         </td> 
        </tr> 
       </table> 
       <br /> 
       <br /> 
      </div> 
     </asp:Panel> 

В таблице tItems заполняется следующим образом:

    For Each dr As DataRow In ds.Tables(0).Rows 
         tr = New TableRow() 
         tc = New TableCell() 
         Dim sName As String = "cbItem_" & CInt(dr("ITEM_ID")) 
         Dim cb As New CheckBox() 
         cb.ID = sName 
         cb.Text = dr("ITEM_DESC").ToString.Trim 
         If CInt(dr("UGICheckOFF")) = 1 Then 
          cb.Checked = True 
         Else 
          cb.Checked = False 
         End If 
         [snip formatting] 
         tc.Controls.Add(cb) 
         tr.Cells.Add(tc) 
         tc2 = New TableCell() 
         Dim sPrice As String = String.Format("{0:C}", dr("ITEM_PRICE")) 
         tc2.Text = sPrice 
         [snip formatting] 
         tr.Cells.Add(tc2) 
         tItems.Rows.Add(tr) 
        Next 

В таблице заселяет отлично и показывает, когда я использую код-позади, чтобы показать mpeUpsell ModalPopupExtender.

обработчика кнопки bNext выглядит следующим образом:

Protected Sub bNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bNext.Click 
    If iItemArray IsNot Nothing Then iItemArray = Nothing ' get rid of it 
    ' Handle the Next Button 
    Dim iCartID As Integer = -1 
    iCartID = CInt(Session("CartID")) 
    ' iterate the items and add each to cart if not already in cart 
    iItemArray = New ArrayList() 
    For Each tr As TableRow In tItems.Rows 
     For Each tc As TableCell In tr.Cells 
      For Each ctl As Control In tc.Controls 
       If TypeOf (ctl) Is CheckBox Then 
        Dim cb As CheckBox = CType(ctl, CheckBox) 
        If cb.Checked Then 
         'if there are checks create array of item IDs checked. 
         Dim itemid As Integer = CInt(cb.ID.Replace("cbItem_", "")) 
         iItemArray.Add(itemid) 
        End If 
       End If 
      Next 
     Next 
    Next 
[snip] 
End Sub 

Когда обработчик выполняется, tItems.Rows.Count НОЛЬ и ForEach просто проваливается, потому что строки таблицы исчезли.

Очевидно, что я что-то пропустил; Я просто не могу понять, что я пропустил.

Thanks, John.

+0

Можете ли вы проверить порядок, в котором вызывается поселение таблиц и обработчик нажатия кнопки? Я думаю, что таблица заполняет слишком поздно. –

+0

Я думаю, что он потерял информацию в asp Table. Поэтому я переключился на GridView и установил столбцы для элементов upsell. Это работает. –

ответ

1

Решение состоит в том, чтобы отказаться от таблицы asp, поскольку в этом случае она не является сдержанной. Вместо этого я использовал gridview и привязал к нему datatable, и смог получить значения.

Спасибо.

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

  • Нет связанных вопросов^_^