Eli olen tehnyt lomakkeen jossa on yrityksen tiedot tekstikenttinä. Tein samalle lomakkeelle haku kentät jossa textboxiin syötetään kohdenumero tai yrityksen nimi. Tämän jälkeen valitaan comboboxista että kummalla haetaan eli kohdenumerolla vai yrityksen nimellä. Haku toimii todella hienosti tällä lomakkeella mutta tarkoitus olisi että ku painan päävalikosta hae niin avautuu "haku" ikkuna jossa on tuo textbox, combobox ja painike joka suoritta hakemisen. Tässä vaiheessa tullee se minun ongelma. Eli en saa hakemiani tuloksia näkymään tuolla lomakkeella, jossa on yrityksen tiedot. Voisiko joku antaa apuja minulle tähän?
Tässä vähän koodia jota olen tehnyt, tämä koodi toimii täydellisesti siinä lomakkeella missä on nuo yrityksen tiedoille varatut textboxit.
Dim kohdenro As Integer
Dim hakuYritys As String
If ComboBox1.Text = "" Then
MsgBox("Valise kriteeri jolla haet", MsgBoxStyle.OkOnly, "Virhe")
ElseIf ComboBox1.SelectedItem = "Kohdenumero" Then
kohdenro = TextBox1.Text
Me.YritysTableAdapter.FillByKohdenumero(Me.KantaDataSet.Yritys, kohdenro)
If BindingNavigatorPositionItem.Text = "0" Then
MsgBox("Kohdenumerolla ei löytynyt tuloksia", MsgBoxStyle.OkOnly, "Ei löytynyt")
Me.YritysTableAdapter.FillByKohdenumero(Me.KantaDataSet.Yritys, kohdenro)
End If
Else
hakuYritys = ComboBox1.SelectedItem = "Yritys"
hakuYritys = TextBox1.Text
Me.YritysTableAdapter.FillByYritys(Me.KantaDataSet.Yritys, hakuYritys)
If BindingNavigatorPositionItem.Text = "0" Then
MsgBox("Yrityksen nimellä ei löytynyt tuloksia", MsgBoxStyle.OkOnly, "Ei löytynyt")
Me.YritysTableAdapter.FillByYritys(Me.KantaDataSet.Yritys, hakuYritys)
End If
End If
End Subhaku ikkunasa siis siinä missä on pelkästään textbox, combobox ja painike ja painikkeen takana tuo yllä oleva koodi niin olen yrittänyt muutella koodia mutta tuloksetta. Olen yrittänyt viitata myös yritys lomakkeen YritysTableAdabtereihin ja datasetteihin tästäkään huolimatta en saa toimimaan.
Olikohan tää nyt varmasti liian vaikeesti selitetty?
Kiitos!
t: mmikko
Jos oikein ymmärsin, niin tuo postaamasi koodi toimi paikassa X, eli siinä itsessään ei ole vikaa.
Lähtisin tutkimaan mitä eroa on ympäristössä, jossa se ei toimi. Saitko jonkin virheilmoituksen, vai mitä ylipäätään tapahtuu kun yrität ajaa koodia?
Pystytkö heittämään koko projektin jonnekin, josta sen voisi ladata tutkittavaksi?
Ainakin kohta, jossa on
hakuYritys = ComboBox1.SelectedItem = "Yritys" hakuYritys = TextBox1.Text
pisti silmään =)
ja saa käyttää niitä tageja alkuun koodivb hakasulkujen sisään ja loppu /koodivb
oli vaikeaa katsoa noita if endif-rakenteita
Moikka mmikko!
tämä on yksi mahdollinen tapa...tai sitten kapseloit luokkaan ja käytät elegantteja Get & Set property hienouksia...
'Module1.vb
Public Module Module1
Public txtctl As TextBox, cboctl As ComboBox
Public Sub ShowMsg( _
ByVal msg As String, ByVal dlg As String)
MsgBox(msg, MsgBoxStyle.OkOnly, dlg)
End Sub
End Module'Form1.vb
Private Sub HaeToolStripMenuItem_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles HaeToolStripMenuItem.Click
dim fForm2 As New Form2
fForm2.ShowDialog
fForm2 = Nothing
If txtctl.Text = String.Empty Then
Exit Sub
End If
Dim msg As String = String.Empty
If cboctl.SelectedItem = "Numerolla" Then
Me.YritysTableAdapter.FillByKohdenumero( _
Me.KantaDataSet.Yritys, CType(txtctl.Text,Integer))
If BindingNavigatorPositionItem.Text = "0" Then
msg = "Kohdenumerolla ei löytynyt tuloksia"
End If
ElseIf cboctl.SelectedItem = "Nimellä" Then
Me.YritysTableAdapter.FillByYritys( _
Me.KantaDataSet.Yritys, txtctl.Text)
If BindingNavigatorPositionItem.Text = "0" Then
msg = "Yrityksen nimellä ei löytynyt tuloksia"
End If
End If
txtctl = Nothing: cboctl = Nothing
If msg <> String.Empty Then
ShowMsg(msg, "Ei löytynyt")
End If
End Sub'Form2.vb
Dim haku As Boolean = False
'...
Sub Form2_Load(sender As System.Object, _
e As System.EventArgs) Handles Form2.Load
ComboBox1.Items.Clear
ComboBox1.Items.Add("Nimellä")
ComboBox1.Items.Add("Numerolla")
ComboBox1.SelectedIndex = 0
txtctl = TextBox1: cboctl = ComboBox1
End Sub
Sub Form2Form_Closing(sender As SystemObject, _
e As System.FormClosingEventArgs) Handles Form2.Closing
If Not haku Then
txtctl.Text = String.Empty
End If
End Sub
Private Sub Button1_Click(sender As Object, _
e As System.EventArgs) Handles Button1.Click
If ComboBox1.Text = String.Empty Then
ShowMsg("Valise hakukriteeri", "Virhe")
ComboBox1.Focus: Exit Sub
ElseIf TextBox1.Text = String.Empty Then
ShowMsg("Aseta hakuarvo", "Virhe")
TextBox1.Focus: Exit Sub
End If
haku = True: Me.Close
End Sub
Sub TextBox_1KeyUp(sender As System.Object, _
e As System.KeyEventArgs) Handles TextBox1.KeyUp
CheckString
End Sub
Sub ComboBox1_SelectedIndexChanged( _
sender As System.Object, e As System.EventArgs) _
Handles ComboBox1.SelectedIndexChanged
CheckString
End Sub
Sub CheckString()
If ComboBox1.SelectedItem.ToString = _
"Numerolla" And TextBox1.Text.Length > 0 Then
For i As Integer = 0 To TextBox1.Text.Length -1
Select Case Asc(TextBox1.Text.Substring(i, 1))
Case 48 To 57
Case Else
TextBox1.Text = _
TextBox1.Text.Replace( _
TextBox1.Text.Substring(i, 1), "")
Exit Sub
End Select
Next i
End If
End SubKiitos nea! en vain oikein saa kiinni tuosta koodista, mitä tapahtuu missäkin :/
Moikka taas mmikko!
' Moduuli (Module1) ' pääpointti on, että kun alustetaan moduulissa ' pari julkista objektimuuttujaa ja määritellän esim. ' TextBox- ja ComboBox-kontrolleiksi niin näihin ' muuttujiin voidaan viitata esim. projektin ' miltä tahansa lomakkeelta... Public txtctl As TextBox, cboctl As ComboBox ' tai esim. Public DataSetti As System.Data.DataSet
' Lomake2 (Form2) '...jolloin esim. sen lomakkeen lataamisen yhteydessä, jolla ' määritellään hakuehdot, voidaan esim. julkinen objektimuuttuja ' [l]txtctl[/l] asettaa lomakkeella olevaksi [l]TextBox1[/l]-kontrolliksi ' jne... txtctl = TextBox1: cboctl = ComboBox1
'Päälomake (Form1) ' kun lomakkeella Form2 oli asetettu julkiset objektimuuttujat, ' saadan esim. Form2.TextBox1.Text-arvo haettua muuttujasta ' tekemällä viittaus tyyliin: Dim Teksti As String = txtctl.Text ' Syy miksi viittaus ei onnistu suoraan tyyliin: Dim Teksti As String = Form2.TextBox1.Text '...on siinä, että ' Designer määrittää kaikkien lomakkeiden kontrollit oletusarvoisesti ' privaateiksi, jolloin niihin voidaan viitata suoraan vain siltä ' lomakkeelta, jolla ne sijaitsevat... '(esim. Private Me.TextBox1 As New System.Windows.Forms.TextBox) jne... ' jos esim Form2 Designer määrittelyssä alustus tehtäisiin tyyliin: ' Public Shared Me.TextBox1 As New System.Windows.Forms.TextBox ' niin viittaaminen onnistuisi toiselta lomakkeelta suoraan tyyliin: MsgBox(Form2.TextBox1.Text) '...tämä ei ole kuitenkaan järkevää muissa, kuin erityistapauksissa...
Ihan vaan tiedoksi että alkuperäinen kysyjä kertoi sähköpostilla että ongelma ratkesi. (Vikana oli että ohjelma ei tuonnut tulosformia näkyville)
Kiitos grezille ja nealle avuista.. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.