Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-09-2014, 15:24   #1
mistermix73
Junior Member
 
Iscritto dal: Sep 2014
Messaggi: 5
Visual studio - problema datagridview

Ciao, ho creato un software usando windows form di visual studio ma ho un problema con la datagridview, in pratica ho creato un button che invia l'ora attuale alla cella della riga selezionata in quel momento in una datagridview il problema e che dovrebbe farlo solo per una volta mentre invece ogni volta che viene cliccato il button mi aggiorna l'ora, qualcuno sa dirmi come evitare di sovrascrivere una cella?
mistermix73 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2014, 15:07   #2
msangi
Member
 
Iscritto dal: Sep 2011
Città: Londra
Messaggi: 167
Postare il codice potrebbe aiutare a individuare il tuo problema.

Ad occhio, quello che devi fare è tenere traccia in una variabile del fatto che hai eseguito l'operazione la prima volta, così puoi evitare di ripeterla ai click successivi.

L'approccio ideale è quello di definire un tuo command (qui trovi un esempio) e poi fare un binding con il click del bottone.
In questo modo separi chiaramente la componente grafica del bottone e la logica associata alla sua pressione.
__________________
Twitter - Blog
msangi è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2014, 16:41   #3
birmarco
Senior Member
 
L'Avatar di birmarco
 
Iscritto dal: Mar 2008
Città: Milano; 9 Vendite concluse -> Wilde; emmepi; Homerj81; cos1950; mariotanza; Benia; grigor; alekia; ARG0
Messaggi: 11160
Codice:
private class TuaPagina 
{
       private TuaPagina()
       {
              btnGrid.Click =+ btnGrid_Click;
       }

       private void btnGrid_Click(object sender, EventArgs e)
       {
              //Inserisci data nella grid
              btnGrid.Click =- btnGrid_Click;
       } 
}
Questa è una possibilità che ti evita di usare un boolean. Dopo aver inserito la data rimuovi l'handler del click.

Poi dipende se questo bottone ti serve anche per fare altro oppure no

Sicuramente se dopo il click non de-registri l'handler che inserisce l'ora, ogni volta che clicchi il bottone il codice verrà sempre eseguito.

Può essere anche meglio il suggerimento di msangi se stai creando un software con MVVM, in questo caso nel CanExecute dell'ICommand fai il check della data (è già inserita o no?)
birmarco è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2014, 11:13   #4
mistermix73
Junior Member
 
Iscritto dal: Sep 2014
Messaggi: 5
Grazie delle risposte ragazzi il button non posso disabilitarlo poichè serve per inserire gli altri record in datagridview, in pratica è un programma di gestione garage e funziona cosi: una datagridview popolata tramite due button, il button1 mi permette di inserire targa, tariffa ed ora di entrata e il button2 mi inserisce l'ora di uscita e l'importo da pagare nella riga selezionata, per questo mi serve che il button2 mi inserisca l'ora di uscita solo una volta per ogni riga altrimenti si rischia che l'utente seleziona la riga sbagliata e gli modifica una seconda volta l'orario di conseguenza l'importo da pagare e gli eventuali totali di giornata (che tra l'altro ancora non ho creato ) questo è il metodo che ho usato io:

nel pubblic class form2
Private ind As Integer

mentre nell'evento button2_click
DataGridView1.Rows(ind).SetValues(Me.DataGridView1.Item(0, ind).Value.ToString, Me.DataGridView1.Item(1, ind).Value.ToString, Me.DataGridView1.Item(2, ind).Value.ToString, Me.DataGridView1.Item(3, ind).Value.ToString, TextBox2.Text)
mistermix73 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2014, 00:15   #5
birmarco
Senior Member
 
L'Avatar di birmarco
 
Iscritto dal: Mar 2008
Città: Milano; 9 Vendite concluse -> Wilde; emmepi; Homerj81; cos1950; mariotanza; Benia; grigor; alekia; ARG0
Messaggi: 11160
Quella riga riga di codice viola almeno 5 codici di diritto penale!
E' troppo lunga da leggere

Cmq se il button può settare solo una volta la cella devi in qualche modo tenere traccia di ciò.
Soluzione 1:
Nel caso la cella può essere riempita una sola volta (quindi prima era vuota):

Codice:
If (String.IsNullOrWhiteSpace(Grid.SelectedItem.Value) Than
    //Aggiungi data
End If
Soluzione 2:
Nel caso la cella possa avere anche altri valori prima della tua azione, devi tenere traccia degli inserimenti. Dato che è una sola colonna/riga può andare bene un array, altrimenti devi usare una matrice:

//Nel corpo della classe
Codice:
Private col As New List(Of Integer)
//Ogni volta che inserisci una nuova riga
Codice:
col.Add(0);
//Al click del bottone, controlli che la posizione nella lista non sia già settata, in caso sia 0 imposti la data, altrimenti lasci stare. L'1 nella lista sta ad indicare che hai già settato quella data.
Codice:
If (Grid.SelectedItem.ColIndex < col.Count) Than
     If (Col[RawIndex] == 0) Than
         Col[RawIndex] = 1
         //Setto la data
     EndIf
End If
PS. Non uso VB da un sacco, potrei aver fatto errori di sintassi
PPS. Grid è la tua GridDataView, SelectedItem ipotizzo sia l'elemento selezionato (cella), Value e RawIndex il valore della cella e il suo indice di riga... sono anni che non uso Windows Form, non ricordo più come sia la GridDataView
birmarco è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2014, 13:11   #6
mistermix73
Junior Member
 
Iscritto dal: Sep 2014
Messaggi: 5
Sto provando le due possibilità ovviamente adattandole al mio caso ma (causa la mia ignoranza/inesperienza) mi da sempre errore in tutti e due casi. Nel primo caso:

If (String.IsNullOrWhiteSpace(Datagridview1.SelectedItem.Value) Then
//va avanti con il codice
End If

nel secondo caso:

If (Datagridview1.SelectedItem.ColIndex < col.Count) Then
If (Col[RawIndex] == 0) Then
Col[RawIndex] = 1
//va avanti con il codice
EndIf
End If

ho provato diverse soluzioni ma niente....
mistermix73 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2014, 16:51   #7
birmarco
Senior Member
 
L'Avatar di birmarco
 
Iscritto dal: Mar 2008
Città: Milano; 9 Vendite concluse -> Wilde; emmepi; Homerj81; cos1950; mariotanza; Benia; grigor; alekia; ARG0
Messaggi: 11160
Quote:
Originariamente inviato da mistermix73 Guarda i messaggi
Sto provando le due possibilità ovviamente adattandole al mio caso ma (causa la mia ignoranza/inesperienza) mi da sempre errore in tutti e due casi. Nel primo caso:

If (String.IsNullOrWhiteSpace(Datagridview1.SelectedItem.Value) Then
//va avanti con il codice
End If

nel secondo caso:

If (Datagridview1.SelectedItem.ColIndex < col.Count) Then
If (Col[RawIndex] == 0) Then
Col[RawIndex] = 1
//va avanti con il codice
EndIf
End If

ho provato diverse soluzioni ma niente....
Come avevo scritto nel PS sono proprietà inventate da me per farti capire il concetto, non ricordando quelle di default della DataGridView

Con SelectedItem intendo la proprietà che definisce la cella selezionata, non so se c'è, ma sicuramente puoi riferirti facilmente ad essa guardando la doc su MSDN
Stessa cosa per SelectedItem.Value indica il contenuto della cella che hai selezionato, anche qui devi cercare la proprietà giusta.
Nel tuo codice usi "DataGridView1.Item(0, ind).Value", quindi puoi intendere il mio codice come DataGridView1.Item(IndiceColonnaSelezionata, IndiceRigaSelezionata).Value

RawIndex indica l'indice della riga selezionata dall'utente, anche in questo caso devi cercare tu la proprietà relativa all'indice della riga selezionata.

birmarco è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2014, 13:26   #8
mistermix73
Junior Member
 
Iscritto dal: Sep 2014
Messaggi: 5
If String.IsNullOrWhiteSpace(DataGridView1.Item(4, ind).Value) Then

fatto grazie mille!!
mistermix73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2014, 13:35   #9
mistermix73
Junior Member
 
Iscritto dal: Sep 2014
Messaggi: 5
Per caso sai dirmi anche se c'e' modo di far comparire sempre un formato numerico a due cifre in un label? al momento fermando il cronometro prima del 10 mi compare una sola cifra per esempio 9 ma a me serve il formato 09
mistermix73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2014, 16:42   #10
msangi
Member
 
Iscritto dal: Sep 2011
Città: Londra
Messaggi: 167
Dai un'occhiata qui per vedere come puoi impostare la formattazione in una label http://stackoverflow.com/a/18362876/353268
__________________
Twitter - Blog
msangi è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
EcoFlow, il Black Friday porta grande ri...
Gli sconti più pesanti del Black ...
Smart #5 BRABUS segna il nuovo record di...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v