|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
[VB.NET 2010] Associare Textbox a Cella Datagrid
Rieccomi
Dopo 4 giorni passati a risolvere un bug di crossthreading e di Connessione ai DB mi ritrovo davanti ad un ostacolo dettato dalla mia inesperienza su *.NET (1 mese circa che ci "smanetto") in poche parole io ho una datagrid ben costruita (tutta tramite codice , postato sotto) e vorrei riempire il campo di una textbox con il valore selezionato (tramite mouse) dal datagrid , in modo tale da poterlo modificare Codice:
'Impostiamo la connessione all avvio del form
DataAdapter.SelectCommand = New OleDbCommand()
'Credo la connessione al comando
DataAdapter.SelectCommand.Connection = Connessione
'Creo la Query
DataAdapter.SelectCommand.CommandText = "SELECT * FROM email"
DataAdapter.SelectCommand.CommandType = CommandType.Text
'Apro la Connessione con il Database
Connessione.Open()
'Inserisco le intestazioni nel dataset
DataAdapter.Fill(DataSet, "email")
'Chiudo la connessione con il Database
Connessione.Close()
'Creo i dati in Gridview
DataGridView1.AutoGenerateColumns = True
DataGridView1.DataSource = DataSet
DataGridView1.DataMember = "email"
'Modifico qualche proprietà di visualizzazione del DataGridView
Dim ColoreAlternatoCelle As New DataGridViewCellStyle()
ColoreAlternatoCelle.BackColor = Color.WhiteSmoke
DataGridView1.AlternatingRowsDefaultCellStyle = ColoreAlternatoCelle
DataGridView1.Columns(0).HeaderText = "ID Univoco E-Mail"
DataGridView1.Columns(1).HeaderText = "E-Mail"
'Pulisco il buffer
AggiungiEmail_button.Enabled = False
per la Textbox come faccio ? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Puoi farlo semplicemente sfruttando l'evento CellClick del DataGridView ( d'ora in poi : DGV ) :
Codice:
Private Sub DGV_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV.CellClick
Try
TextBox1.Text = DGV(e.ColumnIndex, e.RowIndex).Value
Catch ex As Exception
End Try
End Sub
Quando hai finito di editare nella TextBox il valore prelevato dalla DGV, lo reimposti nella stessa cella selezionata con : Codice:
DGV.SelectedCells(0).Value = TextBox1.Text
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Grazie ora provo
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Quote:
Grazie ancora ! |
|
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Il DB riceve le modifiche solo sull'Update della fonte dati a cui è collegato il DGV. Ovviamente puoi sceglire tu quando eseguirlo, anche ad ogni modifica di una singola cella tramite quella TextBox, volendo...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Quote:
Codice:
If ModificaEmail_textbox.Text = "" And ID = 0 Then
ErroreMod_Label.Text = "Il campo E-Mail è Vuoto"
Salva_button.Enabled = False
Else
Dim Email As String = ModificaEmail_textbox.Text
If EmailAddressCheck(Email) = False Then
ErroreMod_Label.Text = "E-Mail non corretta, Prego inserire una E-Mail valida"
Salva_button.Enabled = False
Else
'Dichiarazione di nuove variabili per l'evento
Dim Comando As OleDbCommand = New OleDbCommand()
'Inserisco la nuova E-Mail
Comando.Connection = Connessione
Comando.CommandText = "UPDATE email SET email = @EMAIL WHERE id_email = @ID"
Comando.Parameters.AddWithValue("@ID", ID)
Comando.Parameters.AddWithValue("@EMAIL", Email)
'Apriamo la connessione
Connessione.Open()
'Eseguiamo e vediamo se funziona
Try
Comando.ExecuteNonQuery()
Catch Eccezione As OleDb.OleDbException
MessageBox.Show(Eccezione.Message)
End Try
'Aggiorniamo il DataGridView1
Connessione.Close()
DataSet.Clear()
'Impostiamo la connessione all avvio del form
DataAdapter.SelectCommand = New OleDbCommand()
'Credo la connessione al comando
DataAdapter.SelectCommand.Connection = Connessione
'Creo la Query
DataAdapter.SelectCommand.CommandText = "SELECT * FROM email"
DataAdapter.SelectCommand.CommandType = CommandType.Text
'Apro la Connessione con il Database
Connessione.Open()
'Inserisco le intestazioni nel dataset
DataAdapter.Fill(DataSet, "email")
'Segnaliamo che è andato tutto bene
SmsPanel.Logbox.Items.Add(Now() & " Modificata E-Mail : " & VecchiaEmail & " in " & ModificaEmail_textbox.Text)
ModificaEmail_textbox.Text = ""
ErroreMod_Label.Text = "E-Mail Modificata Con successo!"
'Chiudiamo la connession
Connessione.Close()
End If
Salva_button.Enabled = False
End If
codice inser into Codice:
Dim Email As String = Email_textbox.Text
'Inserisci nuova E-Mail
If Email_textbox.Text = "" Then
Errore_label.Text = "Campo E-Mail VUOTO!, Prego inserire una E-Mail valida"
Else
'Altro codice
If EmailAddressCheck(Email) = False Then
Errore_label.Text = "E-Mail non corretta, Prego inserire una E-Mail valida"
Else
'Dichiarazione di nuove variabili per l'evento
Dim Comando As OleDbCommand = New OleDbCommand()
'Inserisco la nuova E-Mail
Comando.Connection = Connessione
Comando.CommandText = "INSERT INTO email (email) VALUES(@email)"
Comando.Parameters.AddWithValue("@email", Email)
'Apriamo la connessione
Connessione.Open()
'Eseguiamo e vediamo se funziona
Try
Comando.ExecuteNonQuery()
Catch Eccezione As OleDb.OleDbException
MessageBox.Show(Eccezione.Message)
End Try
'Aggiorniamo il DataGridView1
Connessione.Close()
DataSet.Clear()
'Impostiamo la connessione all avvio del form
DataAdapter.SelectCommand = New OleDbCommand()
'Credo la connessione al comando
DataAdapter.SelectCommand.Connection = Connessione
'Creo la Query
DataAdapter.SelectCommand.CommandText = "SELECT * FROM email"
DataAdapter.SelectCommand.CommandType = CommandType.Text
'Apro la Connessione con il Database
Connessione.Open()
'Inserisco le intestazioni nel dataset
DataAdapter.Fill(DataSet, "email")
'Segnaliamo che è andato tutto bene
SmsPanel.Logbox.Items.Add(Now() & " Aggiunta E-Mail : " & Email_textbox.Text)
Email_textbox.Text = ""
Errore_label.Text = "E-Mail Aggiunta Con successo!"
'Chiudiamo la connession
Connessione.Close()
Email = ""
AggiungiEmail_button.Enabled = False
End If
End If
Ultima modifica di Ludo237 : 09-12-2010 alle 17:04. Motivo: Precisazioni |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Non entro nel merito di quei codici. Da un rapido esame ti dico subito che è una tecnica che non userei...
Se avessi dato un'occhiata all'area Discussioni sulla mia pagina FB, avresti trovato un link a questo thread : http://www.hwupgrade.it/forum/showthread.php?t=2275776 vedi mio post #8. Quello è un metodo semplice, leggibile e sicuro per gestire una DGV. Fossi in te ci farei un pensierino...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Quote:
Ora controlloHo visto il codice e ho capito ! , ora cerco di adattarlo alla mia esigenza perchè ho bisogno che la modifica sia applicata dalla Textbox e non dalla griglia Ultima modifica di Ludo237 : 10-12-2010 alle 15:04. Motivo: Precisazioni |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Il problema non è DataGridView o il DataSet , il problema è che il pulsante "Applica Modifiche" (prendere il testo dentro ad una textbox) non le applica nemmeno al Database ... ergo non si aggiornerà mai il DataSet ne il Datagridview
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Ma se prima aggiorni la cella della DGV ( che dev'essere bindata al DataSet, come nel mio esempio ), e poi usi quel codice : Codice:
If DS.HasChanges() Then
Using CB As New OleDb.OleDbCommandBuilder(DA)
DA.UpdateCommand = CB.GetUpdateCommand
DA.InsertCommand = CB.GetInsertCommand
DA.DeleteCommand = CB.GetDeleteCommand
DA.Update(DS)
End Using
DS.AcceptChanges()
MsgBox("Modifiche Salvate", MsgBoxStyle.Information, "OK")
End If
Se segui quella tecnica alla lettera non puoi sbagliare. Se invece stai tentando un "mix" tra la mia tecnica e il tuo tentativo precedente, temo che ci sarà parecchio da
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Quote:
Teoricamente cosi dovrei essere "Indipendente" dal DVG Ultima modifica di Ludo237 : 10-12-2010 alle 15:40. |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
DGV.SelectedCells(0).Value = TextBox1.Text Codice:
Using CB As New OleDb.OleDbCommandBuilder(DA)
DA.UpdateCommand = CB.GetUpdateCommand
DA.InsertCommand = CB.GetInsertCommand
DA.DeleteCommand = CB.GetDeleteCommand
DA.Update(DS)
End Using
DS.AcceptChanges()
MsgBox("Modifiche Salvate", MsgBoxStyle.Information, "OK")
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Questo nell evento DVG_CellClick ?
Codice:
DGV.SelectedCells(0).Value = TextBox1.Text Codice:
Using CB As New OleDb.OleDbCommandBuilder(DA)
DA.UpdateCommand = CB.GetUpdateCommand
DA.InsertCommand = CB.GetInsertCommand
DA.DeleteCommand = CB.GetDeleteCommand
DA.Update(DS)
End Using
DS.AcceptChanges()
MsgBox("Modifiche Salvate", MsgBoxStyle.Information, "OK")
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Eh, NO !
Adesso ho capito perchè non va. Se vuoi aggiornare tutto dopo l'edit della TextBox, va tutto insieme nell'Applica-Modifiche : Codice:
DGV.SelectedCells(0).Value = TextBox1.Text
Using CB As New OleDb.OleDbCommandBuilder(DA)
DA.UpdateCommand = CB.GetUpdateCommand
DA.InsertCommand = CB.GetInsertCommand
DA.DeleteCommand = CB.GetDeleteCommand
DA.Update(DS)
End Using
DS.AcceptChanges()
MsgBox("Modifiche Salvate", MsgBoxStyle.Information, "OK")
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
#16 | ||
|
Member
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
|
Quote:
Quote:
![]() per il tuo aiuto il minimo che mi sembrava oneroso fare è sostenere la tua pagina di FB (guarda la mia firma) Ultima modifica di Ludo237 : 10-12-2010 alle 16:27. |
||
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
E' proprio lo spirito giusto !
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:44.




















