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
Digitare dati su celle datagrid e salvare
venerdì 24 giugno 2005 - 10.15
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ele
Profilo
| Newbie
40
messaggi | Data Invio:
ven 24 giu 2005 - 10:15
Salve a tutti. Per caricare più records in un datagrid ho utilizzato la seguente routine, che passa i dati dal db ad un dataset pubblico:
Dim Csql As String
Dim dataset As Data.DataSet
Dim DataAdapter As OleDb.OleDbDataAdapter
Dim cnn As OleDbConnection = New OleDbConnection(StrConn)
Csql = "Select idtassanolo,anno,durata,prezzo,incremento,codicetassanolo from angTassanolo where codiceTassaNolo=" & LblCodice.Text & " and idazienda=" & IdAzienda & " and attivo=1"
DataGrid1.DataSource = (SelectOleDbSrvRows(StrConn, Csql, "angtassanolo").Tables(0))
La funzione SelectOleDbSrvRows è la seguente: (ds è un dataset pubblico)
Public Shared Function SelectOleDbSrvRows(ByVal myConnection As String, ByVal mySelectQuery As String, ByVal myTableName As String) As DataSet
Dim myconn As OledbConnection = New OledbConnection(StrConn)
myDataAdapter.SelectCommand = New OleDb.OleDbCommand(mySelectQuery, myconn)
myconn.Open()
ds = New DataSet
myDataAdapter.Fill(ds, myTableName)
myDataAdapter.Update(ds, myTableName)
myconn.Close()
Return ds
End Function
Questo mi permette di digitare i dati direttamente nelle celle del datagrid, ma poi non riesco a salvare nel database, poichè non riesco a reperire i nuovi dati appena inseriti. Utilizzo la seguente routine (che non funziona!):
Dim i As Integer
Dim csql As String
Dim Dbe As New sqlDBexe
Dbe.Connessione(StrConn)
'mettere i controlli sui campi numerici
For i = 0 To DataGrid1.VisibleRowCount - 2
csql = "Insert into angTassaNolo (IdAzienda, " _
& "CodiceTassaNolo, " _
& "Nome," _
& "Durata, " _
& "Anno, " _
& "Revisione, " _
& "Prezzo, " _
& "Incremento, " _
& "Attivo, " _
& "OpeA, " _
& "DataA, " _
& "OpeM, " _
& "DataM) values (" _
& IdAzienda & "," _
& LblCodice.Text & ",'" _
& LTrim(TxtNome.Text.Replace("'", "''")) & "','" _
& DataGrid1.Item(i, 2) & "','" _
& DataGrid1.Item(i, 1) & "'," _
& 1 & "," _
& CambiaMySql(DataGrid1.Item(i, 3)) & "," _
& "0," _
& "1," _
& USerID & ",'" _
& Format(MyData, "yyyy-MM-dd") & "'," _
& USerID & ",'" _
& Format(MyData, "yyyy-MM-dd") & "');"
Dbe.DB_execute(csql)
Next
DataGrid1.DataSource = Nothing
ds = Nothing
Dbe.Chiudi()
Qualcuno mi sa aiutare? Scusate per la lunghezza del messaggio....
totti240282
Profilo
| Guru
1.574
messaggi | Data Invio:
ven 24 giu 2005 - 12:41
hai provato con datagric.cell(coordinate riga,colonna )
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 24 giu 2005 - 13:22
Ciao ele,
non funziona proprio così. Tu crei un DataSet proveniente dal database, chiudi la connessione e leghi (binding) il DataSet alla Datagrid. Naturalmente devi usare un DataAdapter.
Nel frattempo un utente inserisce nuovi dati o aggiorna quelli esistenti. Se tu chiami il metodo GetChanges() del DataSet otterrai l'elenco dei records aggiunti, eliminati o aggiornati. Devi poi utilizzare nuovamente il DataAdapter con il DataSet per aggiornare i dati sul Database.
Il Framework si preoccupa di creare le query opportune e di sincronizzare le modifiche.
ciao
david
6969
Profilo
| Junior Member
88
messaggi | Data Invio:
lun 27 giu 2005 - 17:23
Scusate, ho guardato attentamente il codice scritto da ele e le altre risposte, ma è da qualche giorno che non ottengo risultati.
partendo dal codice (ho tolto la funzione solo per semplicità)::
Dim myDataAdapter As System.Data.OleDb.OleDbDataAdapter
Dim dataset As System.Data.DataSet
conn = New System.Data.OleDb.OleDbConnection(strPercorsoDB)
conn.Open()
dataset = New System.Data.DataSet
myDataAdapter = New System.Data.OleDb.OleDbDataAdapter("Select * from table", conn)
myDataAdapter.Fill(dataset, "table")
myDataAdapter.Update(dataset, "table")
conn.Close()
DataGrid1.DataSource = dataset
DataGrid1.DataBind()
E così semplicemente visualizzo il dataGrid per visualizzare i dati collegati grazie al DataSet. La mia domanda: ele come fai a dare la possibilità di scrivere all'interno del DataGrid??
Ho provato anche ad utilizzare (come hai fatto ele) il SelectCommand del DataAdapter, ma oltre ad ottenere un errore ("System.NullReferenceException: Object reference not set to an instance of an object") mi sembra di capire che il SelectCommand serve ad aggiungere nuove tabelle o fonti di dati al DataSet creato, quindi non riesco a capire come 6 riuscito a dare la possibilità di scrivere all'interno delle celle del DataGrid..
grazie per qualsiasi consiglio
ciao
alessandro
ele
Profilo
| Newbie
40
messaggi | Data Invio:
mar 28 giu 2005 - 15:49
Salve, grazie a tutti per i suggerimenti....in particolare mi è stato utile il metodo .AcceptChanges che ho utlizzato prima della insert.
In pratica ho solo aggiunto il comando ds.AcceptChanges() prima della insert into che ho riportato nel primo post. (Esattamente prima del ciclo for della insert).
Ora le modifiche fatte dall'utente vengono archiviate correttamente nel database e quindi ricaricate corrette nel datagrid quando riapro la form.
Grazie,
elena.
ele
Profilo
| Newbie
40
messaggi | Data Invio:
mar 28 giu 2005 - 16:03
Ehm, dimenticavo....ho cambiato ovviamente anche la insert nel modo seguente:
Dim Dbe2 As New sqlDBexe
Dbe2.Connessione(StrConn)
'ds.GetChanges(DataRowState.Modified)
ds.AcceptChanges()
'For i = 0 To DataGrid1.VisibleRowCount - 2
For i = 0 To ds.Tables("angtassanolo").Rows.Count - 1
csql = "Insert into angTassaNolo (IdAzienda, " _
& "CodiceTassaNolo, " _
& "Nome," _
& "Durata, " _
& "Anno, " _
& "Revisione, " _
& "Prezzo, " _
& "Incremento, " _
& "Attivo, " _
& "OpeA, " _
& "DataA, " _
& "OpeM, " _
& "DataM) values (" _
& IdAzienda & "," _
& LblCodice.Text & ",'" _
& LTrim(TxtNome.Text.Replace("'", "''")) & "','" _
& ds.Tables("angtassanolo").Rows(i).Item("durata") & "','" _
& ds.Tables("angtassanolo").Rows(i).Item("anno") & "'," _
& 1 & "," _
& CambiaMySql(ds.Tables("angtassanolo").Rows(i).Item("prezzo")) & "," _
& "0," _
& "1," _
& USerID & ",'" _
& Format(MyData, "yyyy-MM-dd") & "'," _
& USerID & ",'" _
& Format(MyData, "yyyy-MM-dd") & "');"
Dbe2.DB_execute(csql)
Next
DataGrid1.DataSource = Nothing
ds = Nothing
Dbe2.Chiudi()
...forse non è il modo più elegante di risolvere il problema ma per ora funziona.
Volevo dire ad Alessandro che ha dichiarato il dataset dentro una routine mentre deve essere pubblico in un modulo. Non so, è l'unica differenza che vedo.
6969
Profilo
| Junior Member
88
messaggi | Data Invio:
mar 28 giu 2005 - 16:05
ele,
solo 1 cosa, tu sei riuscito a creare un dataGrid dove le singole celle sono modificabili? mi immagino, quindi, che nelle celle ci siamo delle TextBox opp. DropDownList, vero?
ele
Profilo
| Newbie
40
messaggi | Data Invio:
mar 28 giu 2005 - 16:51
Veramente le celle mi compaiono cliccabili da subito nel datagrid; in asp.net invece è più complicato, bisogna inserire la textbox nella colonna modello..etc.
Per caricare il datagrid ho utilizzato le prime 7 righe del codice che ho inviato nel primo post...non so come mai non ti appaiano...
6969
Profilo
| Junior Member
88
messaggi | Data Invio:
mar 28 giu 2005 - 17:08
scusami,
ma cosa intendi per cliccabili, se tu clicci su una cella cosa ti compare? Penso, che ti compaia sempre un oggeto che ti consenta di scrivere in quella cella oppure cos'altro?
E dopo anche tu stai utilizzando asp.net!! Ho utilizzato la stessa logica del tuo codice (senza funzione..) Ma quello che ottengo è una DataGrid standar, dove le info sono solo visualizzate senza poterle modificare..
Cosa ne dici?
grazie
alessandro
ele
Profilo
| Newbie
40
messaggi | Data Invio:
mar 28 giu 2005 - 17:25
Cliccabili non era la parola esatta, volevo dire editabili, in cui puoi scrivere e quindi modificare il contenuto.
Comunque io non sto realizzando un'applicazione Web con asp.net, ma un'applicazione locale in vb.net, in cui il datagrid ha un comportamento più elestico e il codice che ho scritto riguarda appunto un'applicazione locale.
Come ti dicevo, nelle applicazioni Web (Asp.net) le celle non sono editabili; bisogna inserire una colonna modello nel datagrid e poi (tasto destro sul datagrid, modifica modello) una textbox dentro itemtemplate.
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 !