errore in listbox

ciao a tutti, sto cercando di inserire dei valori in una weblistbox ma dopo aver modificato qualcosa mi comparso il seguente errore

Index or size is negative or greater than the allowed amount

pu far riferimento al numero di colonne? ho verificato ed i campi del mio recordset coincidono con il numero di colonne della listbox…

cosa pu essere?

saluti

Quasi sicuramente un problema legato al numero di colonne, ma ovviamente bisognerebbe dare un’occhiata al codice per farsi un’idea pi precisa.

In passato ho avuto lo stesso messaggio che mi ha perseguitato per un po’, uscendo ad intervalli casuali su una listbox il cui numero di colonne era variato da codice. Alla fine ho individuato il problema che era legato al numero di colonne.

La listbox ha un numero di colonne fisse o variabile da codice? In caso il numero di colonne venga variato dinamicamente da codice, prima di variarlo, accertarti di svuotare la listbox con un Listbox.DeleteAllRows.

Il numero di colonne base 1
l’idice di colonne base 0
quindi se hai 10 colonne
la prima 0 l’ultima 9 ;

strano, ho provato anche a commentare la parte di addrow ma esce lo stesso ?!?!?!?!?

Dim db As New MSSQLServerDatabase
db.host =eurocartb2b.dbserver // or just the IP if using the default instance
db.DatabaseName = eurocartb2b.dbnm
db.UserName = eurocartb2b.user  // or "Domain\\UserID for trusted domain accounts
db.Password = eurocartb2b.pass

If db.Connect Then
  
  // passiamo alla gestione articoli - aggiungiamo filtri famiglia e gruppo e spostiamo pulsante cerca
  LblRicerca.Text="RICERCA ARTICOLO"
  LblElenco.Text="Elenco Articoli"
  LblFamiglia.Visible=true
  SpFamiglia.Visible=true
  LblGrumer.Visible=true
  SpGruMer.Visible=true
  BtnCerca.top=590
  // recuperiamo gli articoli
  LstProdotti.Visible=true
  LstProdotti.DeleteAllRows
  LstProdotti.ColumnCount=10
  LstProdotti.HeaderStyle=StyleHeader
  LstProdotti.ColumnHeaderStyle(0)= StyleHeader
  LstProdotti.ColumnHeaderStyle(1)= StyleHeader
  LstProdotti.ColumnHeaderStyle(2)= StyleHeader
  LstProdotti.ColumnHeaderStyle(3)= StyleHeader
  LstProdotti.ColumnHeaderStyle(4)= StyleHeader
  LstProdotti.ColumnHeaderStyle(5)= StyleHeader
  LstProdotti.ColumnHeaderStyle(6)= StyleHeader
  LstProdotti.ColumnHeaderStyle(7)= StyleHeader
  LstProdotti.ColumnHeaderStyle(8)= StyleHeader
  LstProdotti.ColumnHeaderStyle(9)= StyleHeader
  
  LstProdotti.Heading(0)="Codice"
  LstProdotti.Heading(1)="Barcode"
  LstProdotti.Heading(2)="Descrizione"
  LstProdotti.Heading(3)="Um"
  LstProdotti.Heading(4)="PzXCt"
  LstProdotti.Heading(5)="Prz Unit."
  LstProdotti.Heading(6)="Prz Ivato"
  LstProdotti.Heading(7)="Dispon."
  LstProdotti.Heading(8)="Fornitore"
  LstProdotti.Heading(9)=" "
  LstProdotti.ColumnWidths="10%,10%,20%,5%,5%,10%,10%,20%,5%,5%"
  
  
  // qui dobbiamo verificare che ci siano i filtri.....da fare
  Dim ps As MSSQLSERVERPreparedStatement
  Dim stringa_sql,ok_query as string
  Dim rs As RecordSet
  ok_query="N"
  //adesso i prodotti 
  stringa_sql = "select distinct prodotti.IdArt,prodotti.CodiceArt,prodotti.DesArt,prodotti.Um,prodotti.Moltip,prodotti.Famiglia,prodotti.CatOmo,"_
  +"prodotti.Grumer,listini.ImpUni*(1+listini.sconto1/100)*(1+listini.sconto2/100)*(1+listini.sconto3/100)*(1+listini.sconto4/100),"_
  +"prodotti.AliIva,listini.IdListino,giacenze.esistenza,giacenze.ordinato,giacenze.impegnato,giacenze.riservato from prodotti inner join listini"_
  +" on prodotti.IdArt=listini.IdArt left outer join giacenze on prodotti.IdArt=giacenze.IdArt where listini.IdListino='"+Listino+"'"
  
  if SpFamiglia.Text<> "Selezionare" then
    stringa_sql=stringa_sql+" and prodotti.Famiglia = '"+SpFamiglia.Text.Trim+"'"
    ok_query="S"
  end if
  
  if SpGruMer.Text <> "Selezionare" then
    stringa_sql=stringa_sql+" and prodotti.Grumer = '"+SpGruMer.Text.Trim+"'"
    ok_query="S"
  end if
  
  if FiltroCodDes.Text.Trim.len>0 then
    stringa_sql=stringa_sql+" and (prodotti.IdArt like '%"+FiltroCodDes.Text+"%' or prodotti.DesArt like '%"+FiltroCodDes.Text+"%')"
    ok_query="S"
  end if
  
  stringa_sql=stringa_sql+" order by prodotti.Famiglia,prodotti.Grumer,prodotti.DesArt"
  
  BREAK
  'msgbox(stringa_sql)
  
  if ok_query="S" then
    ps = db.Prepare(stringa_sql) 
    rs = ps.SQLSelect
    
    dim codart,barcode,desart,aliiva,headerfamiglia,headergrumer,impuni as string
    dim riga as Integer
    dim dispcont,nettounitario as Double
    
    'if rs <> Nil Then
    'codart="xxx"
    'riga=0
    'headerfamiglia="xxx"
    'headergrumer="xxx"
    'While Not rs.EOF
    '// vediamo se devo cambiare il gruppo ed inserire l'intestazione
    'if rs.IdxField(6).StringValue.trim<> headerfamiglia or rs.IdxField(8).StringValue.trim <> headergrumer then
    'headerfamiglia=rs.IdxField(6).StringValue.trim
    'headergrumer=rs.IdxField(8).StringValue.trim
    'LstProdotti.AddRow(headerfamiglia,headergrumer," "," "," "," "," "," "," "," ")
    '// mettiamo lo stile giusto
    'LstProdotti.cellstyle(LstProdotti.LastIndex,0)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,1)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,2)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,3)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,4)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,5)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,6)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,7)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,8)=StyleHeaderFamGru
    'LstProdotti.cellstyle(LstProdotti.LastIndex,9)=StyleHeaderFamGru
    'end if
    '
    'codart= rs.IdxField(1).StringValue
    'barcode=rs.IdxField(2).StringValue
    'desart= rs.IdxField(3).StringValue
    'dispcont=rs.IdxField(12).IntegerValue+rs.IdxField(13).IntegerValue-rs.IdxField(14).IntegerValue-rs.IdxField(15).IntegerValue
    ''impuni=replace(rs.IdxField(9).StringValue,".",",")
    ''impuni=mid(impuni,1,len(impuni)-10)
    '
    ''LstProdotti.AddRow(codart,barcode,desart,rs.IdxField(4).StringValue,rs.IdxField(5).StringValue,impuni,impuni,replace(mid(dispcont.ToText,1,len(dispcont.ToText)-4),".",","),"fornitore","")
    '
    'LstProdotti.AddRow("1","2","3","4","5","6","7","8","9","10")
    '
    '
    'LstProdotti.cellstyle(LstProdotti.LastIndex,3)=StylePrezzoOrdine
    'LstProdotti.cellstyle(LstProdotti.LastIndex,4)=StylePrezzoCarrello
    'LstProdotti.cellstyle(LstProdotti.LastIndex,5)=StylePrezzoCarrello
    'LstProdotti.cellstyle(LstProdotti.LastIndex,6)=StylePrezzoCarrello
    'LstProdotti.cellstyle(LstProdotti.LastIndex,7)=StylePrezzoCarrello
    'LstProdotti.cellstyle(LstProdotti.LastIndex,8)=StylePrezzoCarrello
    'LstProdotti.CellPicture(LstProdotti.LastIndex,9) = cart_icon
    '//
    'riga=riga+1
    '
    'rs.MoveNext
    'Wend
    'rs.Close
    '// selezioniamo il primo articolo (tolto la riga famiglia+gruppo)
    'if riga > 0 then
    'LstProdotti.Selected(1)=true
    'end if
    'End If
    
    LblElenco.Text=LblElenco.Text+" ("+riga.ToText+")"
  else
    CaricaAssortimento
  end if
  ProgressDialog1.Close
  
  db.Close
Else
  MsgBox("Connection error:" + db.ErrorMessage)
End If
FiltroCodDes.Text=""
LstProdotti.ColumnWidths="10%,10%,25%,5%,5%,10%,10%,20%,5%"

9 dimensioni, ma dieci colonne?

Ja lo ho notato anche io me medesimo

sistemato, ma non va cmq

azz siete stati + veloci voi del mio edit del post !!!

allora, sto tentando di riscrivere il metodo exnovo, non appena arrivo a questo punto ho l’errore…

Dim db As New MSSQLServerDatabase
db.host =eurocartb2b.dbserver // or just the IP if using the default instance
db.DatabaseName = eurocartb2b.dbnm
db.UserName = eurocartb2b.user  // or "Domain\\UserID for trusted domain accounts
db.Password = eurocartb2b.pass

If db.Connect Then
  LblElenco.Text="Elenco Articoli"
  LblFamiglia.Visible=true
  SpFamiglia.Visible=true
  LblGrumer.Visible=true
  SpGruMer.Visible=true
  BtnCerca.top=590
  // recuperiamo gli articoli
  LstProdotti.Visible=true
  LstProdotti.DeleteAllRows
  LstProdotti.ColumnCount=10
  LstProdotti.HeaderStyle=StyleHeader
  LstProdotti.ColumnHeaderStyle(0)= StyleHeader
  LstProdotti.ColumnHeaderStyle(1)= StyleHeader
  LstProdotti.ColumnHeaderStyle(2)= StyleHeader
  LstProdotti.ColumnHeaderStyle(3)= StyleHeader
  LstProdotti.ColumnHeaderStyle(4)= StyleHeader
  LstProdotti.ColumnHeaderStyle(5)= StyleHeader
  LstProdotti.ColumnHeaderStyle(6)= StyleHeader
  LstProdotti.ColumnHeaderStyle(7)= StyleHeader
  LstProdotti.ColumnHeaderStyle(8)= StyleHeader
  LstProdotti.ColumnHeaderStyle(9)= StyleHeader
  
  LstProdotti.Heading(0)="Codice"
  LstProdotti.Heading(1)="Barcode"
  LstProdotti.Heading(2)="Descrizione"
  LstProdotti.Heading(3)="Um"
  LstProdotti.Heading(4)="PzXCt"
  LstProdotti.Heading(5)="Prz Unit."
  LstProdotti.Heading(6)="Prz Ivato"
  LstProdotti.Heading(7)="Dispon."
  LstProdotti.Heading(8)="Fornitore"
  LstProdotti.Heading(9)=" "
  LstProdotti.ColumnWidths="10%,10%,20%,5%,5%,10%,10%,20%,5%,5%"
Else
  MsgBox("Connection error:" + db.ErrorMessage)
End If

Prima di

LstProdotti.ColumnCount=10

prova a mettere

LstProdotti.ColumnWidths="*"

ottenendo

LstProdotti.ColumnWidths="*"
LstProdotti.ColumnCount=10

forse ho trovato, non so perch ma in un altra parte della web app mi sono trovato
LstProdotti.ColumnCount=13

e probabilmente passa prima di li, quindi se tu definisci una struttura ad una weblistbox non puoi cambiarla dinamicamente da codice mi pare di capire…

Puoi cambiarla a condizione che la listbox sia vuota, come detto all’inizio del post

lo credevo anche io ed infatti la sequenza era questa:

LstProdotti.Visible=true
LstProdotti.DeleteAllRows
LstProdotti.ColumnCount=10

ma non andava…cmq era quello