Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
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


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
L'ultima puntata di Falsissimo rimossa d...
NASA Perseverance ha utilizzato percorsi...
Blue Origin sospende per almeno due anni...
Stampanti, Los Angeles verso il divieto ...
Roscosmos Amur: il razzo spaziale riutil...
Robot aspirapolvere per tutte le tasche:...
Accedere alle mail di un lavoratore lice...
Amazon Haul scatenato: migliaia di prodo...
Amazon Seconda Mano rilancia: sconto ext...
Super prezzo Amazon per ECOVACS DEEBOT T...
NVIDIA Shield TV: dieci anni di aggiorna...
Le 10 offerte migliori su Amazon oggi, c...
Autostrade che 'pensano': l'AI arriva su...
AMD alza l'asticella: Zen 6 è la ...
Il satellite spia russo Olymp-1 si &egra...
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: 13:11.


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