2013-02-28 9 views
1

У меня есть функция, которая добавляет элементы в мой arraylist. моя проблема в том, что он содержит только один элемент за раз, так как он повторно инициализирует массив, освещенный каждый раз, когда я нажимаю кнопку. Каков синтаксис в VB только для инициализации массива, если он еще не создан?как инициализировать мой arraylist

Dim itemSelectAs New ArrayList() 
Dim Quantities As New ArrayList() 
Dim itemQtyOrdered As Integer 

Public Sub ShtickDataList_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.ListViewCommandEventArgs) Handles ShtickDataList.ItemCommand 


    If e.CommandName = "addToCart" Then 
     Dim itemQuantity As DropDownList = e.Item.FindControl("QuantityDropDown") 
     itemQtyOrdered = itemQuantity.SelectedValue 
     ItemSelect.Add(e.CommandArgument) 
     Quantities.Add(itemQtyOrdered) 

     Session("itemInCart") = ItemSelect 
     Session("quantities") = Quantities 


     viewInvoice() 

    End If 


End Sub 

Protected Sub viewInvoice() 

    Dim itemSelected As ArrayList = DirectCast(Session("itemInCart"), ArrayList) 
    Dim QuantityofItem As ArrayList = DirectCast(Session("quantities"), ArrayList) 

    Dim conn As SqlConnection 
    Dim comm As SqlCommand 
    Dim reader As SqlDataReader 
    Dim purimConnection2 As String = ConfigurationManager.ConnectionStrings("Purim").ConnectionString 
    conn = New SqlConnection(purimConnection2) 

    comm = New SqlCommand("SELECT ProductName FROM Products WHERE ProductID = @ProductID", conn) 

    Dim i As Integer 
    For i = 0 To ItemSelect.Count - 1 
    comm.Parameters.Add("@ProductID", Data.SqlDbType.Int) 
    comm.Parameters("@ProductID").Value = (ItemSelected.Count - 1) 

    'Next 

    Try 
     conn.Open() 
     reader = comm.ExecuteReader() 
     ViewCartlink.Text = "View Cart: (" & ItemSelected.Count & ")" 



    Finally 
     conn.Close() 
    End Try 
End Sub 
+0

Что вы хотите сделать? – Neolisk

+0

Я хочу продолжать добавлять в список массивов. так, как я это делал, это с myArrayList.Add. Каждый раз, когда я нажимаю кнопку putton, чтобы добавить элемент в arraylist, последний элемент переопределяет первый, оставляя меня с одним элементом в arraylist в любой точке. Я хочу успешно добавить элементы в мой arraylist, чтобы они были доступны в сеансе пользователей. кто-то упомянул о том, что если мистер будет инициализировать список массивов снова, тем самым потеряв первый элемент – user2120280

+1

Есть ли какая-то конкретная причина, почему вы хотите избежать Generic.List (Of T)? См. [Что такое разброс b/w Generic List и Arraylist] (http://stackoverflow.com/questions/3530350/what-is-difference-bw-generic-list-and-arraylist-generic-list-vs-hashtable- ge) и [ArrayList против общего списка для примитивных типов и 64-бит] (http://blogs.msdn.com/b/joshwil/archive/2004/04/13/112598.aspx) – Neolisk

ответ

3

Прежде всего вам необходимо измерить список массивов.

Dim array_list as ArrayList() 

Тогда вы можете создать экземпляр один

array_list = new ArrayList 

Или вы можете объединить их в один шаг:

Dim array_list = new ArrayList() 

После этого вы можете добавлять и удалять элементы из списка массива с

array_list.add(obj) 

и удалите с

array_list.remove(obj) 

Похоже, ваша проблема связана с доступом к членам архариста. Новые элементы всегда добавляются к концу arraylist. Чтобы получить к ним доступ напрямую, вам понадобится их индекс. Если вы знаете, индекс элемента, который вы хотите получить доступ Используйте

array_list(i) 

Если вам не нужно будет перебирать массив. Для этого у вас есть два варианта. Вы можете использовать «для каждого», или вы можете использовать обычный цикл for и использовать array_list.count в качестве верхней границы.

Вы обновляете свои два значения сеанса каждый раз, когда вы вызываете свое меню с нажатием кнопки. Вам нужно вытащить их из переменной Session и поместить их в локальные переменные и вернуть их обратно в переменную сеанса.

Ваш метод кнопка должна быть:

Public Sub ShtickDataList_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.ListViewCommandEventArgs) Handles ShtickDataList.ItemCommand 


    if isNothing(itemSelect) Then itemSelect = New ArrayList() 
    if isNothing(itemQtyOrdered) Then itemQtyOrdered= New ArrayList() 

    If e.CommandName = "addToCart" Then 


     Dim itemQuantity As DropDownList = e.Item.FindControl("QuantityDropDown") 
     itemQtyOrdered = itemQuantity.SelectedValue 
     ItemSelect.Add(e.CommandArgument) 
     Quantities.Add(itemQtyOrdered) 

     Session("itemInCart") = ItemSelect 
     Session("quantities") = Quantities 


     viewInvoice() 

    End If 


End Sub 

И изменить ваш Глобальный звонки:

Dim itemSelect As ArrayList() = Session("itemInCart") 
Dim Quantities As New ArrayList() = Session("quantities") 
+0

, так что я делаю что. но первый элемент теряется, когда я добавляю новый элемент – user2120280

+0

, как вы добавляете к архаисту? Как вы получаете доступ к своим членам? –

+0

при нажатии кнопки myArray.add (commandArgument) – user2120280

2

Определите массив за пределами события нажатия кнопки. (Уровень Form)

Тогда в случае нажатия кнопки, попробуйте следующее:

If myArrayList Is Nothing then 
    'initializes the array list only if that hasn't happened yet 
    myArrayList = new ArrayList 
End If 
'adds the item to the existing list without causing it to reintialize 
myArrayList.add(item) 

Таким образом, он инициализируется, если это не было, но если у него уже есть. Если он инициализирован на уровне формы, то есть ... он объявлен как новый уже тогда, вы можете просто добавить к нему.

В основном убедитесь, что вы не вызываете New для списка элементов массива в событии нажатия кнопки.

Редактирование для веб-формы:

Вы, вероятно, следует проверить, где вы инициализации ArrayList.Как и в Page_Load:

If Not Page.IsPostBack Then 
    myArrayList = New ArrayList 
End If 

MSDN Postback

+0

Если он был инициализирован на уровне формы, проблема исчезла, насколько я понимаю вопрос. – Neolisk

+0

Edited, я сказал, что плохо в ответе – Jay

+0

я могу написать Если myArrayList ничего после этого myArrayList = новый ArrayList End If некоторой функции() и плохо положить остальные в разделительном субе – user2120280

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