|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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?
|
|
|
|
|
|
#2 |
|
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. |
|
|
|
|
|
#3 |
|
Senior Member
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;
}
}
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?) |
|
|
|
|
|
#4 |
|
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
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) |
|
|
|
|
|
#5 |
|
Senior Member
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
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) Codice:
col.Add(0); Codice:
If (Grid.SelectedItem.ColIndex < col.Count) Than
If (Col[RawIndex] == 0) Than
Col[RawIndex] = 1
//Setto la data
EndIf
End If
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
|
|
|
|
|
|
#6 |
|
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.... |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2008
Città: Milano; 9 Vendite concluse -> Wilde; emmepi; Homerj81; cos1950; mariotanza; Benia; grigor; alekia; ARG0
Messaggi: 11160
|
Quote:
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. |
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Sep 2014
Messaggi: 5
|
If String.IsNullOrWhiteSpace(DataGridView1.Item(4, ind).Value) Then
fatto grazie mille!! |
|
|
|
|
|
#9 |
|
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
|
|
|
|
|
|
#10 |
|
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
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:19.




















