Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: VB2010: Ylikuormituksen ratkaisu epäonnistui

Sivun loppuun

pointer [05.10.2012 10:09:25]

#

Hei, visual basic 2010 antaa seuraavan virhe ilmoituksen tuolle koodin pätkälle. Enkä ymmärrä miksi koska minulla on useita samanlaisia koodeja jotka toimivat moitteettomasti. Kertokaa siis te viisaat miksi näin käy?

Kiitos vastauksista!

Ylikuormituksen ratkaisu epäonnistui, koska mitään julkista kohdetta = ei voi kutsua näillä argumenteilla:
'Public Shared Operator =(a As String, b As String) As Boolean':
Parametria a vastaavaa argumenttia ei voi muuntaa kohteesta DataRowView kohteeksi String.

Public Class Form1
	Private Sub AP_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AP.SelectedIndexChange
		If AP.SelectedItem = "500" And KP.SelectedItem = "100" Then
            With Me
                ASF.DataSource = OverASBindingSource
                ASF.DisplayMember = "OverAS"
                ASF.ValueMember = "OverAS"
                ASF.SelectedIndex = -1
            End With
        End If
	End Sub
End Class

groovyb [05.10.2012 11:24:57]

#

Pistäisitkö koko shared operatorin koodin, ja miten sitä käytät.
Paha sanoa muuten.

Virhe itsessään kertoo että et voi DataRowView objektia asettaa String objektiin ilman muunnosta. (esim. .ToString())

pointer [05.10.2012 11:41:56]

#

Tarkoititko koko koodia vai mitä tarkoitit tuolla shared operator koodilla?

groovyb [05.10.2012 13:10:19]

#

Onko AP.SelectedItem muotoa string?

kokeileppa vaikka AP.SelectedItem.ToString() = "500" etc.

pointer [05.10.2012 14:44:28]

#

Kokeilin ja nyt tuli tällänen: Objektin viittaukseksi ei voi määrittää objektiesiintymää.

Lisäys: Ongelma tulee siitä että ohjelma hakee tuon arvon 500 tietokannasta
Enkä voi laittaa sitä string muotoon koska tuon AP:n vaihtoehdot riippuvat jatkossa muista valinnoista

voisiko tablen datatype vaikuttaa tähän? se on nyt varchar(100)

Metabolix [05.10.2012 16:42:22]

#

Miltä riviltä virheilmoitus tarkalleen tulee? Mitä ovat AP, KP ja ASF?

Grez [05.10.2012 19:57:45]

#

Mitä jos laitat = asemesta .Equals(...)

pointer [08.10.2012 08:12:04]

#

AP,KP ja ASF ovat comboboxeja jotka olen nimenny.
virheilmoitus tulee aina If lauseen ensimmäiseltä riviltä.

If AP.SelectedItem = "500" And KP.SelectedItem = "100" Then

Lisäys:

Grez, kokeilin tuota equals ja nyt antaa seuraavan virheilmoituksen riville:

If AP.SelectedItem.Equals("500") And KP.SelectedItem.Equals("100") Then

virheilmoitus: Objektin viittaukseksi ei voi määrittää objektiesiintymää.

Grez [08.10.2012 11:31:00]

#

Ongelmana siis lienee, että listboxien/combojen itemit on objekteja, eli niihin voi laittaa mitä vaan. Sun pitäis päräyttää ne takaisin niiksi mitä ne oikeasti on.

Sinänsä kyllä ihmettelen, että tämä ei toiminut, koska mielestäni ToStringin pitäisi olla objektin metodi.

If AP.SelectedItem.ToString() = "500" And KP.SelectedItem.ToString() = "100" Then

Voiko noissa kenties olla null-arvoja?

Laita se pysähtymään virheisiin, ja katso mitä se näyttää noiden AP.SelectedItem ja KP.SelectedItem olevan.

pointer [08.10.2012 12:39:12]

#

Olen tätä toteuttanut näin: tein service based databasen johon loin tableja ja tableihin laitoin comboboxien vaihtoehdot. esim jos combobox1 vaihtoehdoista valitaan A niin combobox2 vaihtoehdot tulevat table1:sta mutta jos combobox1 vaihtoehdoista valitaan B niin combobox2 vaihtoehdot tulevat table2:sta.
Tableihin laitoin asetuksiksi, Allow nulls(True) ja varchar(100)

En osannut pysähtyä erikseen tuohon AP.SelectedItem ja KP.SelectedItem kohtaan kun antaa virheeksi koko ensimmäisen rivin.

Grez [08.10.2012 14:47:34]

#

no laita vaikka breakline sille riville ja kun suoritus sitten keskeytyy ko. riville niin häröile hiirellä sen AP.SelectedItem päälle niin sen pitäisi näyttää mikä sen ko. muuttujan arvo on.

pointer [08.10.2012 15:22:17]

#

Tällästä näytti kun vein hiiren päälle

AP.SelectedItem = {System.Data.DataRowView}

KP.SelectedItem = Nothing

lisäks sain tälläset tekstit

AP = {System.Windows.Forms.ComboBox, Items.Count: 5}

KP = {System.Windows.Forms.ComboBox, Items.Count: 0}

Metabolix [08.10.2012 15:52:55]

#

Ratkeaisiko ongelma niin yksinkertaisesti, että tarkistaisit If-lauseen alussa, että kumpikaan SelectedItem ei ole Nothing?

groovyb [08.10.2012 18:11:59]

#

kokeileppa AP.SelectedValue.ToString() == "500"

pointer [09.10.2012 08:26:13]

#

groovyb, ensin se valittaa tuon toisen = kohdalle (expression expected) ja sitten kun sen ottaa pois niin tulee
virheilmoitus: Objektin viittaukseksi ei voi määrittää objektiesiintymää.

groovyb [09.10.2012 09:14:45]

#

Oletko määrittänyt comboboxeille value-, ja displaymemberit?

Combobox.DisplayMember = "KolumninJonkaArvoaNäytetään" 'jota näytetään valikossa
Combobox.ValueMember = "KolumniJonkaArvoaKäytetään" 'tämä palautuu arvona

pointer [09.10.2012 10:26:46]

#

kyllä olen. ASF on combobox jonka olen nimennyt

Grez [09.10.2012 10:56:12]

#

Metabolix kirjoitti:

Ratkeaisiko ongelma niin yksinkertaisesti, että tarkistaisit If-lauseen alussa, että kumpikaan SelectedItem ei ole Nothing?

Luultavasti ratkeaisi.

pointer [09.10.2012 11:33:50]

#

Jos toinen selecteditem onkin nothing niin miten saan muutettua sen?

Grez [09.10.2012 12:39:11]

#

No miksi se pitäisi muuttaa? Jos se on nothing, niin ehtosi siitä että se olisi "100" ei varmasti täyty.

Eli uskoakseni voisit ihan hyvin laittaa vaan:

If AP.SelectedItem IsNot Nothing AndAlso AP.SelectedItem.ToString() = "500" AndAlso _
   KP.SelectedItem IsNot Nothing AndAlso KP.SelectedItem.ToString() = "100" Then

Itseäni kyllä ärsyttää noi VB.Netin AndAlsot ja OrElset.. C#:lla sama olis

if (AP.SelectedItem != null && AP.SelectedItem.ToString() == "500" &&
    KP.SelectedItem != null && KP.SelectedItem.ToString() == "100")

pointer [09.10.2012 12:56:06]

#

Kokeilin tuota nyt. Ei tapahdu yhtään mitään, ei anna edes virheilmoitusta.

If AP.SelectedItem IsNot Nothing AndAlso AP.SelectedItem.ToString() = "500" AndAlso _
   KP.SelectedItem IsNot Nothing AndAlso KP.SelectedItem.ToString() = "100" Then

Grez [09.10.2012 13:18:28]

#

Ai niin kun sulla oli se ValueMember valittuna, eli listalla näkyvä ei ole suoraan toi ToString().. Eli entäs:

If AP.SelectedItem IsNot Nothing AndAlso AP.SelectedValue.ToString() = "500" AndAlso _
   KP.SelectedItem IsNot Nothing AndAlso KP.SelectedValue.ToString() = "100" Then

Tietty mitäänhän ei kuulukaan tapauhtua jos valinnat ei oo 500 ja 100.

pointer [09.10.2012 14:57:04]

#

ompahan kyllä kinkkinen ongelma, kokeilin tuolla ja valitsin arvot 500 ja 100 mutta edelleenkää ei tapahdu mitää... huoh

Grez [09.10.2012 15:17:46]

#

No mitkä noi AP.SelectedValue.ToString() jne on silloin? Ei ton nyt pitäisi olla ongelma eikä mikään.

pointer [09.10.2012 15:43:09]

#

eli katsoin breakpointilla niin
KP.SelectedItem = nothing ja KP.SelectedValue.ToString() = nothing

Grez [09.10.2012 15:44:04]

#

Sitten varmaan kannattaa miettiä, että miten se on mahdollista, jos kuitenkin 100 oli valittuna.

pointer [09.10.2012 15:44:52]

#

AP = {System.Windows.Forms.ComboBox, Items.Count: 5}

Metabolix [09.10.2012 15:51:12]

#

Kai ymmärrät, että tällä hetkellä (ainakin tässä kertomasi tiedon mukaan) tuo koodi ajetaan vain, kun AP-laatikon valinta vaihtuu, eli sinun pitäisi ensin valita arvo KP-laatikosta ja vasta sen jälkeen AP-laatikosta. Lisäksi aiemman viestisi mukaan KP-laatikossa ei ole yhtäkään arvoa, joten tarkista vielä, että sekä koodissa että käyttöliittymässä on oikeat laatikot.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta