2012-01-03 7 views
5

ben 4 öğeler sonra, hala öğeleri ekleyebilir, sorun buArtan Dizi Boyut dinamik

localCart(CARTPID,i) = productId 
localCart(CARTPRICE,i) = productPrice 
localCart(CARTPQUANTITY,i) = 1 

gibi dinamik olarak bu diziye öğeler eklemek

CONST CARTPID = 0 
CONST CARTPRICE = 1 
CONST CARTPQUANTITY = 2 
dim localCart(3,20) 

ASP

bu dizi var ama UBound daima geri dönüyor.

Bu dizinin boyutunu çalışma zamanında artırmak istiyorum, böylece UBOUND en son değeri döndürebilir.

Lütfen bunu nasıl yapacağımı bildirin. İşte benim tam kodu

'Define constants 
CONST CARTPID = 0 
CONST CARTPRICE = 1 
CONST CARTPQUANTITY = 2 

'Get the shopping cart. 
if not isArray(session("cart")) then 
dim localCart(3,20) 
else 
localCart = session("cart") 
end if 

'Get product information 
productID = trim(request.QueryString("productid")) 
productPrice = trim(request.QueryString("price")) 

'Add item to the cart 

if productID <> "" then 
foundIt = false 
for i = 0 to ubound(localCart) 
    if localCart(CARTPID,i) = productId then 
     localCart(CARTPQUANTITY,i) = localCart(CARTPQUANTITY,i)+1 
     foundIt = true 
     exit for 
    end if 
next 
if not foundIt then 
    for i = 0 to 20 

     if localCart(CARTPID,i) = "" then 
          ***ReDim Preserve localCart(UBound(localCart, 1) + 1,20)*** 
      localCart(CARTPID,i) = productId 
      localCart(CARTPRICE,i) = productPrice 
      localCart(CARTPQUANTITY,i) = 1 
      exit for 
     end if 
    next 
end if 
end if 

cevap

0

Yeni öğenin her eklendikten sonra diziyi UBound + 1 ile yeniden kullanmayı düşünüyorum, UBound size en son değeri verir.

// New item addition code will go here 
ReDim localCart(UBound(localCart, 1) + 1,20) 

Bu nedenle, yeni öğeyi her eklediğinizde dizinizi yeni boyutta güncelleyecektir.

+0

Teşekkürler, bu çalışıyor ama değerleri koruyamıyorum. En kısa sürede ben ReDim koru kullandıkça, ben bu hatayı alıyorum: aralık /prices_test.asp, çizgi dışına Microsoft VBScript çalışma zamanı hatası '800A0009' simge hata – VJV

+0

kodunuzu herkes görsün göstermek Orijinal mesaja tam kod ekledim. – Robert

+0

sayesinde oluştuğunu nerede 102 – VJV

1

ilk boyut sadece 3 uzunluğunda, ikinci boyutun UBound istiyorsanız İkinci boyut 20. iken, bunu geçerli:

UBound(localCart, 2) 

döndürür Hangi 20. Bunu ReDim Preserve ile birleştirebilmelisiniz.

+0

sayesinde, nasıl Birinci boyutu dinamik olarak mı arttırıyorum? Redim beyanını paylaşır mısınız? – VJV

+1

AFAIK, yalnızca bir dizinin son boyutunu yeniden boyutlandırabilirsiniz. Productid, price ve qty dışında başka bir özellik eklemeniz gerekiyor mu? – Sneal

+0

no başka bir özniteliğe gerek yok. Satırlar bu durumda 4 ile sınırlıdır, dinamik olarak satırlar sütun eklemek istemiyorum. lütfen öner. – VJV

5

Öğeleri dinamik olarak döngü içinde ekliyorsanız, Redim Preserve() deyimini kullanmak istersiniz. Mevcut verilerinizi kaybetmemek için Preserve bölümünü kullanmak isteyeceksiniz.

Aksi senin sadece Redim() deyimi İşte

Redim()/Redim Prevserve() statments kullanma konusunda iyi bir referanstır veri başka bir dizi için redimming sonra dizi verileri kullanılarak ve eğer: http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html