Avatar billede celinder Nybegynder
27. juli 2005 - 22:11 Der er 32 kommentarer

problemer med en variabel

jeg skal pre selecte en value i en listbox.

jeg gør følgende:
lstMainCat.SelectedIndex = reader2.Item(6)

datatyppen der ligger i item(6) er af typpen int i databasen

men den melder fejl stadigvæk

specific argumentoutofrangeexception, specific value was out of the range of valid values.

men jeg har udskrevet den til en teksbox, den burde være god nok, den har valuen 9 hvilket ikke burde ligge uden for den value som den kan antage.

problemet opstår ikke ved de første 8, kun den sidste giver det mening ?
Avatar billede celinder Nybegynder
27. juli 2005 - 22:12 #1
sorry problemet er på dem alle
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:16 #2
Og det er nummer 6 og ikke nummer 5 (den første hedder 0)
Avatar billede celinder Nybegynder
27. juli 2005 - 22:19 #3
hvis jeg kigger på source fra html filen:

ser den sådan ud, det interessante er klippet ud:

                                    <td><select name="lstMainCat" size="8" multiple="multiple" id="lstMainCat" Size="1" style="background-color:#E6E6E6;font-size:10pt;font-weight:bold;height:300px;width:200px;">
    <option value="9">Access to files &amp; systems</option>
    <option value="3">MS Office XP            </option>
    <option value="7">Network and Communication</option>
    <option value="5">Supported Hardware      </option>
    <option value="1">Supported Softwares      </option>
    <option value="6">Unsupported Hardwares    </option>
    <option value="2">Unsupported Softwares    </option>
    <option value="8">Virus and Spyware        </option>
    <option selected="selected" value="4">Windows and CUP          </option>

</select>

jeg har nu fundet ud af at det kun er nogen af dem der laver fejl:

f.eks hvis valuen er 3, fungere den fint, mens 9 og 1 ihvertfald laver fejl !
Avatar billede celinder Nybegynder
27. juli 2005 - 22:20 #4
ja det er nummer 6 og ikke 5, det er jeg sikker på
Avatar billede celinder Nybegynder
27. juli 2005 - 22:25 #5
jeg har også prøvet at skrive den pågældenen value ud til en textbox, og den har nummer 9, så jeg forstår ikke hvad der er galt med lige disse numre
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:33 #6
Det lyder jo mystisk. Måske vi også skal den uinteressant kode ;)
Er den linie du anfører i spørgsmålet også den linie hvor exception opstår?
Har du et link til siden?
Avatar billede celinder Nybegynder
27. juli 2005 - 22:35 #7
jeg kan desværre ikke sende link da det er intraweb.... øv øv, men jeg kan vise kode her -

hvad vil du se af den ?
Avatar billede celinder Nybegynder
27. juli 2005 - 22:38 #8
jeg har nu fundet ud af at den ikke selecter det rigtige heller.

jeg har jo sorted på min select så den bliver hvis i listbox i rigtig rækkefølge.

jeg har nu et eksempel hvor den burde selecte value 3, MS office, se html i kommentar ovenfor.

men den selecter nummer 5 supported hardware. (nummer 3 fra toppen hvis man 0 med og tæller)

så et eller andet er der helt galt.
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:40 #9
Ja, mon ikke ;)

Hvad med fra SELECT-sætningen til du lukker din reader? Sådan ca.
Avatar billede celinder Nybegynder
27. juli 2005 - 22:43 #10
bare for at teste har jeg fjernet den order by fra min select.

nu virker det sådan set hvis jeg gør følgende:

lstMainCat.SelectedIndex = reader2.Item(9) - 1

underligt
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:45 #11
Du sammenligner nok 2 forkerte ting (altså den ene af de 2 er forkert) i en if-sætning
Avatar billede celinder Nybegynder
27. juli 2005 - 22:46 #12
min gamle kode er som følger:

str = "select * from postings join Main_Categories on Sub_1_ID = Main_CatID left join Sub_category_2 on Category_ID = Sub_Cat2_ID left join Sub_category_1 on sub2_sub1ID  = subcat1_ID where posting_ID ='" & PostID & "'"

strSQL2 = New SqlCommand(str, SqlConnection1)
        SqlConnection1.Open()
        reader2 = strSQL2.ExecuteReader

        If reader2.Read Then
            TextBox1.Text = reader2.Item(1)
            TextBox2.Text = reader2.Item(2)

            lstmainUpdate()
            Dim test As String = reader2.Item(9)

            TextBox2.Text = test
            lstMainCat.SelectedIndex = reader2.Item(9)


lstmainUpdate() gør følgende:

Private Sub lstmainUpdate()
        Dim conn As String = ConfigurationSettings.AppSettings("conn")

        Me.SqlConnection1 = New System.Data.SqlClient.SqlConnection
        Me.SqlConnection1.ConnectionString = conn



        SqlConnection1.Open()
        Dim strSQL As SqlCommand

        strSQL = New SqlCommand("MainCategory1", SqlConnection1)
        strSQL.CommandType = CommandType.StoredProcedure
        lstMainCat.DataSource = strSQL.ExecuteReader(CommandBehavior.CloseConnection)


        lstMainCat.DataBind()
        SqlConnection1.Close()


    End Sub

den stored procedure ser sådan her ud:

ALTER PROCEDURE MainCategory
AS
Select * from Main_Categories ORDER BY Main_CatName
Avatar billede celinder Nybegynder
27. juli 2005 - 22:47 #13
fjern 1 tallet i strSQL = New SqlCommand("MainCategory1", SqlConnection1)
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:51 #14
Generelt et par advarsler

1) Aldrig brug "SELECT * ..." men skriv de felter du får brug for men gode navne.
2) Aldrig aflæse samme felt 2 gange - enkelte gang virker det ikke. I dit tilfælde ændrer du til (sådan ca.)

    lstmainUpdate()
    Dim test As int32 = reader2.Item(9)
    TextBox2.Text = "" & test
    lstMainCat.SelectedIndex = test
3) ALDRIG skriv VB.NET kode uden "option strict" (og heller ikke uden "option explicit")
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:53 #15
4) Aflæs felter i samme rækkefølge som de står i SELECT-sætningen - enkelte gange kan det være nødvendigt, afhængigt af valgt driver og andre ting. Det gør du så rigtigt her, så det er jo godt nok.
Avatar billede celinder Nybegynder
27. juli 2005 - 22:53 #16
"option strict" (og heller ikke uden "option explicit ??

hvad er det - ja jeg er lidt grøn !
Avatar billede celinder Nybegynder
27. juli 2005 - 22:56 #17
du siger det er fordi jeg læser fra Main_Categories 2 gange eller ?
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 22:58 #18
I toppen af din .vb fil:

  option explicit on
  option strict on

(kan evt sættes i dit IDE)

5) Lav kun en connection til din database - hver connection koster tid, og een er nok.
6) Hent data ud fra din reader2, luk den, og kald så bagefter din lstmainUpdate()
Avatar billede celinder Nybegynder
27. juli 2005 - 22:59 #19
ok jeg er med læs ikke fra reader(9) 2 gange,.........

men det virker stadig ikke selvom jeg lader være, den test er/var kun for at se hvad der ren faktisk stod på den plads fysisk i en tekstbox

og der stod det rigtige tal.
Avatar billede celinder Nybegynder
27. juli 2005 - 22:59 #20
ok det prøver jeg lige
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 23:01 #21
Nej, det er ikke derfor. Det var bare generelle betragtninger.

Men til sagen. Du sætter selectedindex, men ikke med en indexværdi, men med en value-værdi, så vidt jeg kan forstå. Forstår du forskellen?
Avatar billede celinder Nybegynder
27. juli 2005 - 23:04 #22
ja jeg forstår godt sammenhængen
Avatar billede celinder Nybegynder
27. juli 2005 - 23:05 #23
men jeg kan ikke lige dreje den når jeg så sortere på den...... hmmmm
Avatar billede celinder Nybegynder
27. juli 2005 - 23:06 #24
ahhh jeg bruger bare  lstMainCat.SelectedValue så er alt godt igen :-)
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 23:07 #25
Nu kan jeg ikke huske .NETs listbox udenad, men du kan altid løbe dens items igennem - søge efter dens value, og så sætte det pågældende index som selected. Kræver en lille løkke.
Avatar billede celinder Nybegynder
27. juli 2005 - 23:07 #26
men jeg forstår ikke helt hvordan jeg kan hive alt det ud af basen som jeg gerne vil med kun 1 åbning.......... hmmmm
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 23:07 #27
Og hvis der er en SelectecValue, så er det nok den du skal bruge ;)
Avatar billede celinder Nybegynder
27. juli 2005 - 23:08 #28
men du har fået guidet med ind på svaret

og det skal du have rigtig mange tak for :-)

kommer du ikke med et svar ?
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 23:08 #29
Du kan gøre, som du gør nu - med den lille ændring. Mine punkt 1) -- mange) var generelle anbefalinger.
Avatar billede erikjacobsen Ekspert
27. juli 2005 - 23:08 #30
Jeg samler slet ikke på point, tak.
Avatar billede celinder Nybegynder
27. juli 2005 - 23:11 #31
jamen hmmmm
Avatar billede celinder Nybegynder
27. juli 2005 - 23:14 #32
du skal ihvertfald have mange tak ..........
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