Autore Topic: Simulare click su cella di un Gridview  (Letto 2169 volte)

Offline stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Simulare click su cella di un Gridview
« il: 09 Febbraio 2015, 20:30:05 »
Ciao a tutti,  ;D

tento spiegare il problema:
ho un Gridview di N righe e M colonne giá riempito. (vedi immagine allegata) Al click su ogni cella viene attivata una sub-routine che esegue certe operazioni (cambia colore alla cella, copia il contenuto in un listbox, ecc). Fin qui tutto chiaro e funzionante.


Il problema sorge quando devo rispristinare la condizione del Gridview partendo da un file dati creato precedentemente, contenente solo i valori dei numeri da evidenziare, e non dal click fisico. Cioé: devo simulare il click sulla cella.
Se ad esempio il mio file contiene i valori 4,7,12 devo simulare nella griglia il click sulle caselle 4,7 e 12.

Qualcosa tipo: 
Gridview[x,y].setFocus() ' non funziona
Gridviewdatos.Current.Click() ' non esiste ;)


Grazie in anticipo

 :coder:



Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #1 il: 09 Febbraio 2015, 21:35:45 »
Il tuo scopo è sostanzialmente quello di porre un colore all'interno di una cella della GridView.

Il tuo file dovrà almeno contenere:
* le coordinate delle celle che si intendono colorare/evidanziare. Tali coordinate si attribuiscono specificando il numero d'indice indentificativo della riga e della colonna alle quali la cella da colorare appartiene in comune.
* il colore da impostare.

Nell'esempio pratico che segue, abbiamo una GridView composta da 3 righe e 3 colonne.
Vogliamo colorare/evidenziare di rosso la cella appartenente in comune alla terza riga ed alla prima colonna.
Per colorare una cella si attribuirà il numero identificativo del colore prescelto alla proprietà .Background della cella stabilita.
Codice: gambas [Seleziona]
Public Sub Form_Open()


  With GridView1
    .Columns.Count = 3
    .Rows.count = 3
  End With
 
' Individuiamo la cella da colorare ed impostiamo il colore (ad esempio il rosso):
  GridView1[2, 0].Background = &FF0000
 
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 stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #2 il: 10 Febbraio 2015, 09:40:32 »
Ciao vuott, grazie per la risposta :)

Il tuo scopo è sostanzialmente quello di porre un colore all'interno di una cella della GridView.

In realtá il mio scopo (o meglio il mio desiderio  ;D) è provocare un evento CLICK sulla casella, non solo cambiare il colore. Dato che ad ogni CLICK sulla casella corrispondono una serie di operazioni (richiami a varie SUB).

una parte di queste operazioni:


Codice: gambas [Seleziona]
Public Sub Gridview1_Click()

   
  If GridView1.Current.Background = Color.Gray Then
      GridView1.Current.Background = Color.White
      listView1.Remove(GridView1.Current.Text)
      txtBox1.Text = CInt(txtBox1.Text) - 1
  Else
      GridView1.Current.Background = Color.Gray
      listView1.Add(GridView1.Current.Text, Format(GridView1.Current.Text, "00"))
      txtBox1.Text = CInt(txtBox1.Text) + 1
  Endif
.
.
.
.

End



 :ciao:
« Ultima modifica: 10 Febbraio 2015, 09:50:28 da stefeno »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #3 il: 10 Febbraio 2015, 09:48:24 »
In realtá il mio scopo è provocare un evento CLICK sulla casella, non solo cambiare il colore.
Mi pare, però, che il clic in quanto tale non sia la cosa essenziale, fondamentale.
Non potresti semplicemente determinare l'invocazione di una sub-procedura o di una funzione, da te scritte, dopo la lettura del file contenente i dati ?
« 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 stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #4 il: 10 Febbraio 2015, 09:51:27 »
ho inserito parte di codice nel msg precedente ;)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #5 il: 10 Febbraio 2015, 10:08:17 »
Potresti invocare una sub-procedura o una funzione (ossia una sub-procedura che ritorna un valore alla funzione chiamante).  :-\
« Ultima modifica: 10 Febbraio 2015, 10:45:56 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 stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #6 il: 10 Febbraio 2015, 10:24:54 »
Se dunque intendi invocare una sub-procedura o una funzione (ossia una sub-procedura che ritorna un valore alla funzione chiamante), puoi fare una cosa così:

Il codice che ho evidenziato rappresenta una parte delle istruzioni attivate dall'evento click sulla casella del Gridview. Per ogni casella cliccata naturalmente.

Quando devo ricreare la stessa situazione partendo da un file, quindi ripetere per ogni casella tutte le operazioni, sarebbe stato semplicissimo se solo avessi potuto attivare l'evento click, magari con le coordinate. Come vedi, proprio nella gestione dell'evento, c'è il riferimento al Current per cui non mi devo preoccupare di gestire nient'altro.

Avrei potuto far questo ad esempio:

Codice: gambas [Seleziona]
Public Sub Button4_Click()

Dim a, b As Integer

  For a = 0 To GridView1.Rows.count - 1
    For b = 0 To GridView1.Columns.count - 1
          If GridView1[a, b].text = txtDaFile Then  
            GridView1_Click()  ' non funziona perché il CURRENT non è attivato
          EndIf
    Next
  Next
 

End


 8)

« Ultima modifica: 10 Febbraio 2015, 10:26:36 da stefeno »

Offline stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #7 il: 10 Febbraio 2015, 10:36:16 »
Attualmente l'escamotage è quello di ripetere tutte le funzioni e istruzioni che ho nell'evento click gestendo la numerazione riga/colonna.

Piú o meno cosí:

Codice: gambas [Seleziona]
Public Sub ControllaRiempi_Gridview1()

Dim a, b As Integer

  For a = 0 To GridView1.Rows.count - 1
    For b = 0 To GridView1.Columns.count - 1
      If GridView1[a, b].text = txtDaFile Then    
GridView1[a, b].Background = Color.Gray
listView1.Remove(GridView1[a, b].Text)
.
.
.
.

Endif
     Next
   Next
.
.
.
.

End


Pensavo esistesse il modo di attivare il benedetto evento click della casella ma sembra di no.  :hatecomputer:
Grazie lo stesso :)  :ciao:




Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #8 il: 10 Febbraio 2015, 10:42:09 »
Attualmente l'escamotage è quello di ripetere tutte le funzioni e istruzioni che ho nell'evento click gestendo la numerazione riga/colonna.
A me pare naturale  :-\ , poiché suppongo che nell'individuazione della cella nel caso dell'evento subentri la posizione del puntatore del mouse sulla finestra del sistema grafico X che funge da GridView, nel tuo caso - non operando con il mouse - la cella va definita diversamente: con gli indici delle righe e delle colonne.

« Ultima modifica: 10 Febbraio 2015, 10:48:17 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 stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #9 il: 10 Febbraio 2015, 10:49:39 »
Dato che devo mantenere sia la possibilitá del CLICK sul GRIDVIEW che il caricamento da file, mi ritrovo a ripetere tutte le operazioni in tutti e due i casi. Se modifico il click devo modificare esattamente anche la gestione "massiva". Insomma volevo evitare questa RIDONDANZA.  :hard:

Vabbé..  :-\

Grazie vuott  :2birre:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #10 il: 10 Febbraio 2015, 11:01:11 »
Attualmente l'escamotage è quello di ripetere tutte le funzioni e istruzioni che ho nell'evento click gestendo la numerazione riga/colonna.
...ma il file contiene i dati per ogni cella della GridView ?
« 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 stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #11 il: 10 Febbraio 2015, 11:10:20 »

...ma il file contiene i dati per ogni cella della GridView ?


Il file contiene solo i numeri cliccati, senza ulteriori dati.

ad es. "4,10,20, ecc"
 

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #12 il: 10 Febbraio 2015, 11:15:57 »
volevo evitare questa RIDONDANZA.
Potresti fare una cosa così:
Codice: gambas [Seleziona]
Public Sub Gridview1_Click()  

    cella(GridView1.Row, GridView1.Column)

End  

Public Sub Button1_Click()

  Dim a, b As Integer  
  
' Vado a leggere dal file ed attribuisco i dati a due variabili che rappresentano rigo e colonna:
  a = valore_per_il_rigo
  b = valore_per_la_colonna
  
  cella(a, b)

End



Private Procedure cella(r As Integer, c As Integer)
  
   If GridView1[r, c].Background = Color.Gray Then  
        GridView1[r, c].Background = Color.White  
         listView1.Remove(GridView1[r, c].Text)  
         txtBox1.Text = CInt(txtBox1.Text) - 1  
     Else  
         GridView1[r, c].Background = Color.Gray  
         listView1.Add(GridView1.[r, c].Text, Format(GridView1.[r, c].Text, "00"))  
         txtBox1.Text = CInt(txtBox1.Text) + 1  
     Endif  
  
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 stefeno

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #13 il: 10 Febbraio 2015, 11:22:36 »
 :ok:
anche questa è un'ottima soluzione!

muchas gracias por tu tiempo compañer@ :)  :2birre:
« Ultima modifica: 10 Febbraio 2015, 11:24:14 da stefeno »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Simulare click su cella di un Gridview
« Risposta #14 il: 10 Febbraio 2015, 11:44:06 »

muchas gracias por tu tiempo compañer@
De nada !
« 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. »