Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Aggiungere riga a DataGridView bindato
martedì 23 aprile 2013 - 12.52
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Visual Studio Express
|
MySQL 5.5
lauretta
Profilo
| Newbie
2
messaggi | Data Invio:
mar 23 apr 2013 - 12:52
Premetto che sono alle prime armi e che sto passando dalla teoria alla pratica in queste settimane.
Avrei bisogno di un paio di consigli su un progetto di prova che sto realizzando.
Ho un form dove è presente un DataGridView che è associato ad una tabella di 5 campi. Sono presenti anche 5 textbox che ho bindato allo stesso dataset della DGV.
Fin qui tutto ok, se clicco su una riga della DGV le textbox si popolano correttamente, se modifico un valore su una textbox questo viene riportato sulla DGV.
Ho 3 pulsanti, uno per cancellare una riga dal DGV (e funziona), uno per salvare le modifiche al DGV (e funziona), uno per aggiungere una nuova riga sul quale volevo chiedervi un aiuto.
Premetto che il DGV è settato su readOnly True e AllowUserToAddRows e AllowUserToDeleteRows su False.
Nell'evento click di questo pulsante ho due righe di codice:
- la prima "MyDataTable.Rows.Add()" mi aggiunge una riga al DGV
- la seconda "DGV.Rows(DGV.RowCount - 1).Cells(0).Selected = True)" simula il click sulla colonna 1 dell'ultima riga, in modo da associarmi le textbox a quella che dovrebbe essere la nuova riga inserita.
Qui avrei un problemino: se l'utente ha cliccato sulle intestazioni delle colonne e l'ordinamento è diverso da quello di default la riga potrebbe aggiungersi in una posizione che non è l'ultima, e quindi il codice sopra non funziona.
Qualche suggerimento? Ditemi anche se l'approccio è corretto.
Altra domanda.
Una delle colonne della tabella che visualizzo sul DGV è un codice che è collegato ad un'altra tabella.
Mi piacerebbe avere una textbox che mi visualizzi la descrizione associata al codice leggendola da un'altra tabella. Così quando clicco su una delle righe del DGV si ricaricano in automatico tutte le textbox, compresa questa con la descrizione.
Ho pensato di agire nell'evento TextChanged della textbox che contiene il codice, in modo da ricaricare la descrizione solo quando cambia, oppure potrei intervenire al click sul DGV e inserire nella textbox la descrizione. Ma forse esiste un modo più semplice e carino....
Non potrei bindare in qualche modo anche questa textbox?
Chiedo scusa per eventuali imperfezioni in quello che ho scritto, ma questo progetto di prova mi ha davvero esaurita!
Grazie, Laura.
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mar 23 apr 2013 - 14:11
ciao.
io farei in questo modo per l'aggiunta della riga:
al click sul bottone aggiungi metterei la DGV a Enabled = false. POi toglierei il binding dalle textbox e cancellerei il loro contenuto (così facendo anche se una eventualre riga in precedenza era stata selezionata e visualizata dalla DGV non viene toccata).
Poi sul bottone salva aggiungerei una DataRow alla sorgente della DGV con i campi già valorizzati (presi dalle textbox) e ripristinerei il binding delle textBox.
Per quanto riguarda il problema codice - descrizione le strade sono due:
1 - nella sorgente della DGV carichi anche la colonna con la descrizione. Poi nella DGV caso mai metti la visualizzazione solo della descrizione e non del codice (questo ovviamente è una scelta tua). Se decidi di farlo allora devi creare e associare manualmente le colonne al DGV.
2 - invece di utilizzare una TextBox per la visualizzazione della descrizione, utilizza una ComboBox. Questa la devi caricare con un DataTable contenente due colonne: codice e descrizione. Nel DisplayMember associ la colonna della descrizione mentre nel ValueMember associ la colonna del codice. In questo modo quado ti sposti sulla DGV anche se questa cerca di visualizzare il codice, la combo ti mostrerà il valore della descrizione.
A te la scelta.
Cristian Barca
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
sab 27 apr 2013 - 23:55
Se alleghi il progetto, sperando che il db sia un file di Access, te lo modifico in 2 minuti.
lauretta
Profilo
| Newbie
2
messaggi | Data Invio:
lun 29 apr 2013 - 09:25
Ringrazio entrambi per aver risposto e mi scuso se rispondo sono ora, ma mi ero presa qualche giorno di ferie...
Per jekisi
Ti ringrazio per la proposta, il database è MySql. A parte questo vorrei farcela da sola, imparare e capire. Grazie comunque.
Per AntCiar
Adesso riprendo in mano il progetto e vedo cosa riesco a fare. Per la prima cosa che scrivi (togliere il binding) avevo già letto qualcosa facendo una ricerca su google. Per la seconda parte (descrizione su altra tabella) per il punto 1 mi sembra di aver letto che se faccio così poi devo costruirmi a mano le istruzioni per l'inserimento e la modifica dei record, o sbaglio? Per il punto 2 non ci avevo nemmeno pensato, ma in realtà volevo fare una semplice text box e di fianco un pulsantino che apriva un'altra form dove visualizzo tutte le descrizioni e do la possibilità all'utente di selezionarne un'altra.
Per il momento grazie, ora vedo cosa riesco a fare
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
mer 8 mag 2013 - 11:19
inserisco:
Cn.Open()
sql = "INSERT INTO [Rddt] (Codice) VALUES(" & Chr(34) & CodiceTextBox.Text & Chr(34) & ")"
cmd = New OleDb.OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader
Cn.Close()
Me.RDdtTableAdapter.Fill(Me.DataSet8.RDdt)
Me.RDdtBindingSource.MoveLast()
Salvo:
Me.RDdtDataGridView.EndEdit.ToString()
CodarticoloTextBox.Select()
Cn.Open()
sql = "UPDATE Rddt SET Qtà=" & Chr(34) & QtàTextBox.Text & Chr(34) & ", Datascadenza=" & Chr(34) & DatascadenzaTextBox.Text.Replace(Chr(34), "''") & Chr(34) & " where IdRiga=" & IDrigaTextBox.Text
cmd = New OleDb.OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader
Cn.Close()
elimino riga selezionata:
Cn.Open()
sql = "Delete * From Rddt where Idriga=" & IDrigaTextBox.Text
cmd = New OleDb.OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader
Cn.Close()
Me.RDdtTableAdapter.Fill(Me.DataSet8.RDdt)
Me.RDdtBindingSource.MoveLast()
Spero ti possa essere d' aiuto
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !