Avatar billede agony3 Nybegynder
03. april 2003 - 11:31 Der er 12 kommentarer

arraylist fejler

Løsningen er sikkert nem, men jeg har følgende kode

<Script Runat="Server">

Dim public intError as Integer
Dim arrError AS ArrayList


Sub page_load




  if intError <> Nothing then
      arrError = new ArrayList()   
    arrError.Insert (1, "der er en fejl!")
 
  End if


end sub


</Script>



<%
if intError <> Nothing then
 
  lblError.Text  = "<table width='300' border='1'>"
  lblError.Text &= "  <tr>"
  lblError.Text &= "    <td valign='top'>"
  lblError.Text &= "      <img src='images/error.gif'></td>"
  lblError.Text &= "    <td>"
  lblError.Text &=  arrError(1) & "</td>"
  lblError.Text &= "  </tr>"   
  lblError.Text &= "</table>"   
end if

%>

<asp:Label id="lblError" runat="Server" />

og jeg får følgende fejl:

Object reference not set to an instance of an object.

Det skal måske lige tilføjes at der her er tale om en User Control
Avatar billede z42cool Nybegynder
03. april 2003 - 11:44 #1
Sub page_load
  if intError <> Nothing then
      arrError = new ArrayList()   
    arrError.Add("der er en fejl!")
  End if
end sub

<%
if intError <> Nothing then
 
  lblError.Text  = "<table width='300' border='1'>"
  lblError.Text &= "  <tr>"
  lblError.Text &= "    <td valign='top'>"
  lblError.Text &= "      <img src='images/error.gif'></td>"
  lblError.Text &= "    <td>"
  lblError.Text &=  arrError(0) & "</td>"
  lblError.Text &= "  </tr>"   
  lblError.Text &= "</table>"   
end if

%>
Avatar billede z42cool Nybegynder
03. april 2003 - 11:44 #2
Men hvorfor pokker gør du ikke bare:

Sub page_load
lblError.Text  = "<table width='300' border='1'>"
  lblError.Text &= "  <tr>"
  lblError.Text &= "    <td valign='top'>"
  lblError.Text &= "      <img src='images/error.gif'></td>"
  lblError.Text &= "    <td>"
  lblError.Text &= "Der er en fejl</td>"
  lblError.Text &= "  </tr>"   
  lblError.Text &= "</table>"   
end sub
Avatar billede z42cool Nybegynder
03. april 2003 - 11:45 #3
ups....
Sub page_load
if intError <> Nothing then
  lblError.Text  = "<table width='300' border='1'>"
  lblError.Text &= "  <tr>"
  lblError.Text &= "    <td valign='top'>"
  lblError.Text &= "      <img src='images/error.gif'></td>"
  lblError.Text &= "    <td>"
  lblError.Text &= "Der er en fejl</td>"
  lblError.Text &= "  </tr>"   
  lblError.Text &= "</table>"   
end if
end sub
Avatar billede agony3 Nybegynder
03. april 2003 - 12:01 #4
fordi jeg vil have diverse fejltekster samlet i et array i en usercontrol. Netop derfor har jeg behov for at kunne sige hvilken plads i min arraylist der skal udskrives.
Avatar billede z42cool Nybegynder
03. april 2003 - 12:31 #5
OK - men hvis du vil bruger Insert for explicit at vise element positionerne så skal du starte med indeks 0, så Insert(0, "fejl").
Avatar billede z42cool Nybegynder
03. april 2003 - 12:33 #6
Du burde nu no se på System.Collections.Specialized.StringCollection så du får typesikkerhed i din collection, så slipper du også for at caste når data skal ud fra din ArrayList
Avatar billede agony3 Nybegynder
03. april 2003 - 18:23 #7
men det virker endnu ikke.
Avatar billede z42cool Nybegynder
03. april 2003 - 22:31 #8
Umiddelbart som jeg læser dokumentationen burde du altid kunne sætte ind på en plads svarende til ArrayList.Count, dvs. 0 for en tom ArrayList, men hvis du ikke kan få det til at virke, så kan du jo bare bruge ArrayList.Add og lige inden da aflæse ArrayList.Count der jo inden Add vil være det indeks dit næste element får.
Avatar billede midas_dk Nybegynder
28. april 2003 - 15:54 #9
Okay, nu er jeg måske dum, men er en ArrayList ikke en liste af arrays?

Du burde kunne sige:

Sub page_load
  Dim arrError As String()
  if intError <> Nothing then
      arrError(0) = "fejl"
  End if
end sub

<%
if intError <> Nothing then
 
  lblError.Text  = "<table width='300' border='1'>"
  lblError.Text &= "  <tr>"
  lblError.Text &= "    <td valign='top'>"
  lblError.Text &= "      <img src='images/error.gif'></td>"
  lblError.Text &= "    <td>"
  lblError.Text &=  arrError(0) & "</td>"
  lblError.Text &= "  </tr>"   
  lblError.Text &= "</table>"   
end if

%>
Avatar billede z42cool Nybegynder
28. april 2003 - 15:58 #10
midas.dk>> Nej! ArrayList er en ikke en liste af arrays, det er en collection af System.Object. Hvis du prøver arrError(0) når arrError.Count==0, altså på en tom ArrayList, så får du en ArgumentOutOfRangeException.
Avatar billede midas_dk Nybegynder
29. april 2003 - 10:05 #11
z42cool >> Nåh, okay da ;-)

Jamen det burde aldrig ske, at man forsøger at kalde arrError(0) hvis den ikke findes, i og med at der sammenlignes på det samme ved initialisering og kald af arrError (intError <> Nothing). Dvs. at hver eneste gang, man forsøger at udskrive arrError(0), er den sat til et eller andet...

I øvrigt er det vel omsonst at bruge ArrayList, hvis man ved at det er strenge, der skal udskrives hver gang... Mit eksempel virker altså fint!
Avatar billede z42cool Nybegynder
29. april 2003 - 10:13 #12
midas_dk>> Problemet er ikke i <%%> blokken, men i Page_Load. Hvis intError<>Nothing forsøges arrError(0) indekseret, men da denne plads endnu ikke er tildelt, så genererer det en ArgumentOutOfRangeException. Såfremt man kun har en fejlbesked kan man selvfølgelig bare bruge en streng, men jeg går ud fra at ideen med en ArrayList eller evt. en StringCollection er at åbne mulighed for at samle en række af fejl og til sidst få dem skrevet ud på en gang. Variable arrays er en dårlig løsning idet performance bliver relativt dårlig da der re-allokeres hver gang i stedet for i blokke som med en collection eller ArrayList.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester