Collegamento dati tra 2 Form

mercoledì 02 dicembre 2009 - 12.29

scremo Profilo | Newbie

Ciao a tutti,
ho in testa mille informazioni e non riesco a creare un semplice esempio .
Partendo da una Form1 che ha un campo text box txtcodice vorrei tramite un command button di "Modifica" aprire una Form2 contenente 4 text box :
1- Il codice
2 - Ragione sociale
3 - Località
4- Indirizzo
praticamente al click sul Button della Form 1 deve riportare in binding nella form 2 i dati associati al codice digitato nella Text Box della From1.
Se invece dalla Form1 si fa click su un button "Nuovo" allora nella Form2 abblenco i campi per un nuovo inserimento.
Il codice della Form1 all'evento click del pulsante Modifica è questo :

Dim stringaselect As String

Dim objconnection As New SqlConnection
Dim ObjdataAdapter As New SqlDataAdapter

stringaselect = "SELECT * FROM Tbcontatti" & _
" WHERE [codice cliente] = @cliente "

objconnection.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documenti\CCRM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

' Creo un data adapter con la stringa Sql filtrata
ObjdataAdapter.SelectCommand = New SqlCommand
ObjdataAdapter.SelectCommand.Connection = objconnection
ObjdataAdapter.SelectCommand.CommandText = stringaselect
ObjdataAdapter.SelectCommand.Parameters.Add("@cliente", SqlDbType.Int).Value = txtCodice.Text

'Popolo il DataSet (in teoria con un solo record che arriva dal filtro)
Dim objdataset As DataSet = New DataSet
ObjdataAdapter.Fill(objdataset, "Tbcontatti")

' Popolo un dataview (come da istruzioni libro)
Dim objdataview = New DataView(objdataset.Tables("TbContatti"))
Dim objcurrency As CurrencyManager
objcurrency = CType(Frm_Connessione.BindingContext(objdataview), CurrencyManager)
Frm_Connessione.txtCodice.DataBindings.Add("text", objdataview, "[codice cliente]")

Frm_Connessione.Show()
e sul metodo show mi da errore : Impossibile stabilire l'associazione alla proprietà o alla colonna [codice cliente] di DataSource. Nome parametro: dataMember
Sto leggendo una "fracca" di teoria ma passare a livello pratico è veramente dura . Non so nemmeno se la strada scelta , anche se riuscivo a farla funzionare , era comunque la migliore.

OPPSSS ... ho tolto le parentesi quadre sul nome e sembra funzionare.
Ora la domanda è : visto che non ho nessun confronto con colleghi, vi chiedo: è un modo giusto per arrivare alla soluzione, c'è un modo migliore magari snellendo del codice, magari non conviene creare i dataSet ? ecc...

grazie per l'aiuto e i preziosi consigli .

CrystalEye Profilo | Newbie

Ciao ...
Ci sono vari modi per passare dei valori tra i form , nella mia esperienza ho utilizzato :
Il passaggio tramitte il costruttore e anche tramitte le propietà , cmq se vuoi approfondire altri modi ti lascio un link dove sono spiegati bene anche altri modi
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx.

Per quanto riguarda il passaggio tramitte costruttore :
1. Vai nel secondo form e dichiari un costruttore con parametro di tipo DataSet

Public Sub New(ByVal objdataset As DataSet)
Me.InitializeComponent()
objdataset = objdataset
End Sub
Adesso hai a diposizione il dataSet con il quale fai quello che ti serve.

2.Vai nel pulsante su cui fai click per passare al secondo form e scrivi:
Dim form2 As Form2 = New Form2(objdataset)
form2.ShowDialog()

scremo Profilo | Newbie

Innanzitutto grazie mille.
Il link alla pagina non c'è più ma ho visto la home Page del sito ed i vari link molto interessanti .
Tra il libro (che secondo me è comunque un ottimo libro) e la notevole qtà di documentazione che c'è in giro faccio fatica a capire quale possa essere il metodo giusto per arrivare all'obiettivo. Nel mio piccolo esempio , nella Form1 praticamente uso l'architettura disconnessa , dataAdapter, DataSet ecc ... per filtrare i record da dare in pasto alla Form2 (frm_connessione) , in questa Form invece uso ExecuteNonQuery con Insert Into (se sono in inserimento) o Update (se sono in modifica) , quindi senza la trafila DataSet ecc ... Il risultato lo ottengo ma mi sembra di fare un "mix" che non so se è la cosa più corretta o performante.
Grazie ancora per la disponibilità.

CrystalEye Profilo | Newbie

In effetti averi ragione sul link che non te lo trovava , ma perchè c'èra un punto alla fine
provalo cosi:
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx
Troverai un articolo davvero interessante ;)

Mentre se vai qua http://msdn.microsoft.com/en-us/magazine/cc188717.aspx#S3 troverai un articolo che ti spiega bene l'utilizzo.
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5