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
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())
Tarkoititko koko koodia vai mitä tarkoitit tuolla shared operator koodilla?
Onko AP.SelectedItem muotoa string?
kokeileppa vaikka AP.SelectedItem.ToString() = "500" etc.
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)
Miltä riviltä virheilmoitus tarkalleen tulee? Mitä ovat AP, KP ja ASF?
Mitä jos laitat = asemesta .Equals(...)
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ää.
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.
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.
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.
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}
Ratkeaisiko ongelma niin yksinkertaisesti, että tarkistaisit If-lauseen alussa, että kumpikaan SelectedItem ei ole Nothing?
kokeileppa AP.SelectedValue.ToString() == "500"
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ää.
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
kyllä olen. ASF on combobox jonka olen nimennyt
Metabolix kirjoitti:
Ratkeaisiko ongelma niin yksinkertaisesti, että tarkistaisit If-lauseen alussa, että kumpikaan SelectedItem ei ole Nothing?
Luultavasti ratkeaisi.
Jos toinen selecteditem onkin nothing niin miten saan muutettua sen?
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")
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
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.
ompahan kyllä kinkkinen ongelma, kokeilin tuolla ja valitsin arvot 500 ja 100 mutta edelleenkää ei tapahdu mitää... huoh
No mitkä noi AP.SelectedValue.ToString() jne on silloin? Ei ton nyt pitäisi olla ongelma eikä mikään.
eli katsoin breakpointilla niin
KP.SelectedItem = nothing ja KP.SelectedValue.ToString() = nothing
Sitten varmaan kannattaa miettiä, että miten se on mahdollista, jos kuitenkin 100 oli valittuna.
AP = {System.Windows.Forms.ComboBox, Items.Count: 5}
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.