Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Tiedon hakeminen VB 2005:lla

Sivun loppuun

mmikko [06.11.2008 23:12:14]

#

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 Sub

haku 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

Grez [07.11.2008 00:10:19]

#

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?

JoreSoft [07.11.2008 00:31:34]

#

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

neau33 [07.11.2008 02:34:21]

#

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 Sub

mmikko [07.11.2008 13:05:55]

#

Kiitos nea! en vain oikein saa kiinni tuosta koodista, mitä tapahtuu missäkin :/

neau33 [07.11.2008 18:16:25]

#

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...

Grez [08.11.2008 18:08:19]

#

Ihan vaan tiedoksi että alkuperäinen kysyjä kertoi sähköpostilla että ongelma ratkesi. (Vikana oli että ohjelma ei tuonnut tulosformia näkyville)

mmikko [08.11.2008 22:44:51]

#

Kiitos grezille ja nealle avuista.. :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta