Autore Topic: [RISOLTO]ricerca in GridView  (Letto 1044 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[RISOLTO]ricerca in GridView
« il: 14 Aprile 2013, 15:26:03 »
Buongiorno a tutti
Avrei un quesito a cui non riesco venirne a capo: ho una gridview popolata, vorrei, al momento che riceve il setfocus inserire da tastiera ( evento keypress?) il dato da cercare e posizionarmi sul record che più si avvicina al dato inserito. Se qulcuno può aiutarmi. Grazie
« Ultima modifica: 14 Aprile 2013, 20:56:05 da naderit »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.258
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: ricerca in GridView
« Risposta #1 il: 14 Aprile 2013, 16:05:52 »
.... inserire da tastiera (evento keypress?) il dato da cercare

...ma questo dato da quanti caratteri sarebbe costituito ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: ricerca in GridView
« Risposta #2 il: 14 Aprile 2013, 17:15:03 »
Ciao.
Non dovrebbe avere importanza, ovviamente, più caratteri scrivi, più la ricerca è precisa, esempio: in un elenco di comuni, incomincio a scrivere la lettera "B" in automatico mi posiziono sul comune "Baceno" dell'elenco, al momento "BI" mi posiziono al Comune "Biancavilla" se inserisco una terza lettera "N" mi posiziono su "Binago" ect ect, fino a visualizzare il comune che mi può interessare o che non esiste. Spero di essermi spiegato.
Grazie.   

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.258
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: ricerca in GridView
« Risposta #3 il: 14 Aprile 2013, 17:19:51 »
inserire da tastiera ( evento keypress?) il dato da cercare


Un'altra domanda: dove (in quale Oggetto) verrebbero inseriti man mano i caratteri della parola da cercare ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: ricerca in GridView
« Risposta #4 il: 14 Aprile 2013, 17:32:27 »
non volevo utilizzare nessun oggetto, eventualmente una variabile....
Citazione
Dim i As Integer
Dim i As Integer
For i = 0 To GridView1.Rows.Count - 1
 If GridView1[i, 0].Text = Variabile Then
    Label9.text = "Trovato " & Variabile  'verifico se mi ha trovato il record
  Endif
Next
Next

Al momento sono riuscito a ottenere una ricerca, ma non a posizionarmi sul record

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: ricerca in GridView
« Risposta #5 il: 14 Aprile 2013, 17:39:16 »
in questo caso:
Citazione
Dim i As Integer
Dim valore As String

valore = InputBox("scrivi comune ", "prova input")
  If valore = Null Then Return 
 

For i = 0 To GridView1.Rows.Count - 1
 If GridView1[i, 0].Text = valore Then
    Label9.text = "Trovato " & valore 'verifico se mi ha trovato il record
  Endif
Next

posso inserire il dato nel' inputbox, ma deve essere scritto per intero

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.258
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: ricerca in GridView
« Risposta #6 il: 14 Aprile 2013, 17:47:05 »

posso inserire il dato nel' inputbox, ma deve essere scritto per intero

Eh, perciò t'avevo posto la domanda.


Ad ogni modo per evidenziare una cella specifica della GridView potresti usare il combinato disposto delle seguenti funzione e proprietà (ne faccio appresso un semplice esempio):
Codice: gambas [Seleziona]

Public Sub GridView1_GotFocus()

  With GridView1
    .MoveTo(1, 1)
    .ShowCursor = True
  End With

End

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.258
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: ricerca in GridView
« Risposta #7 il: 14 Aprile 2013, 17:57:00 »
...insomma una cosa così:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  With GridView1
    .Columns.Count = 2
    .Rows.Count = 2
  End With
  
  GridView1[0, 0].Text = "uno"
  GridView1[0, 1].Text = "due"
  GridView1[1, 0].Text = "tre"
  GridView1[1, 1].Text = "quattro"

End


Public Sub GridView1_GotFocus()
  
  Dim j, k As Byte
  Dim s As String
  
  s = InputBox("Immetti la parola da cercare:")
  
' Inizia il doppio ciclo per leggere tutte le celle della "GridView":
    For j = 0 To 1
      For k = 0 To 1
' Se il testo presente nella corrente cella è simile (non necessariamente identico)
' a quello immesso nell'InputBox per la ricerca....
        If GridView1[j, k].Text Like s & "*" Then
'...allora ci si posiziona automaticamente nella corrente cella, la quale viene anche evidenziata...:
          With GridView1
            .MoveTo(j, k)
            .ShowCursor = True
          End With
'...e si esce quindi dal ciclo, perché abbiamo trovato la parola simile a quella immessa nell'InputBox:
          Exit
        Endif
      Next
    Next

End
« Ultima modifica: 14 Aprile 2013, 23:17:08 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: ricerca in GridView
« Risposta #8 il: 14 Aprile 2013, 18:25:34 »
perfetto grazie, al momento cosi funziona usando una inputbox
Citazione
Dim i As Integer
Dim valore As String

valore = UCase$(InputBox("scrivi comune ", "prova input"))
  If valore = Null Then Return 
 

For i = 0 To GridView1.Rows.Count - 1
 If GridView1[i, 0].Text Like valore & "*" Then
    Label9.text = "Trovato " & valore & "al record n° " & i  'verifico se mi ha trovato il record
 
 
 
  With GridView1 
   .MoveTo(i, 0) 
   .ShowCursor = True 
  End With
  GridView1.SetFocus
 
  Endif
Next

ora provo con l'eveto keypress della gridview

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.258
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: ricerca in GridView
« Risposta #9 il: 14 Aprile 2013, 18:37:20 »
ora provo con l'eveto keypress della gridview


...facci sapere !   :)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: ricerca in GridView
« Risposta #10 il: 14 Aprile 2013, 18:53:40 »
in questo modo mi utilizza il primo carattere che inserisco da tastiera:

Codice: gambas [Seleziona]


Public Sub GridView1_KeyPress()
Dim i As Integer
Dim valore As String

valore = Key.Text

For i = 0 To GridView1.Rows.Count - 1

 If GridView1[i, 0].Text Like valore & "*" Then
    Label9.text = "Trovato " & valore & " al record n° " & i  'verifico se mi ha trovato il record
  
 
  
  With GridView1  
   .MoveTo(i, 0)  
   .ShowCursor = True  
  End With

  GridView1.SetFocus
 Endif
  
Next
  
End


è già un passo avanti.... :D  ora sono un pò fuso!
« Ultima modifica: 14 Aprile 2013, 18:59:19 da naderit »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[RISOLTO]Re: ricerca in GridView
« Risposta #11 il: 14 Aprile 2013, 19:47:08 »
credo di aver risolto  :rolleyes:

Codice: gambas [Seleziona]

Public valore As String
 
Public Sub GridView1_KeyPress()

Dim nomedb As String
Dim rscomuni As Result
Dim aprodb As New Connection
Dim sql As String
Dim iRow As String
Dim i As Integer

valore = valore & Key.Text ' aggiungo una lettera per volta

For i = 0 To GridView1.Rows.Count - 1

 If GridView1[i, 0].Text Like valore Then
    Label9.text = "Trovato " & valore & " al record n° " & i  'verifico se mi ha trovato il record
  
 
  
  With GridView1  
   .MoveTo(i, 0)  
   .ShowCursor = True  
  End With
  
  Endif
  
Next

If Key.code = Key.Return Then
   nomedb = "Comuni"
  
  With aprodb
    .Type = "sqlite3"
    .Host = Application.Path  
  End With
  
  aprodb.Name = nomedb
  aprodb.Open
  
  iRow = GridView1.Row   ' imposto iRow con il numero riga che ho cliccato
           sql = "SELECT * FROM Comuni ORDER BY Comune"   ' creo stringa per la query, seleziono tutti i record di rubrica      
           rscomuni = aprodb.Exec(sql)  ' eseguo la query      
    If iRow <> -1 Then  ' se il numero riga è diverso da -1 (cioè nullo) continuo
            rscomuni.MoveTo(iRow) 'mi sposto nel record uguale al numero cliccato
            TextBox5.Text = rscomuni!Comune ' riepio le caselle
            TextBox6.Text = rscomuni!CAP
            TextBox7.Text = rscomuni!SiglaProv
            
      Endif
  Catch  
  Message.Error(Error.Text)
Endif

End


è ancora da perfezionare ma può andare per il momento grazie a "Vuott" per i suggerimenti.
« Ultima modifica: 14 Aprile 2013, 20:37:43 da naderit »