Form pop up

sabato 08 novembre 2008 - 18.12

frrr7 Profilo | Newbie

Ciao a tutti.
Ho creato un database con sql con due tabelle collegate, ho creato 2 form una per il protocollo e una per i contatti (le tabelle).
Ora a me sevirebbe che quando sto immettendo i dati nella form protocollo e mi imbatto in un contatto non presente nella tabella contatti, l'applicazione mi chieda se desidero inserire il nuovo contatto e poi mi apre la form contatti per inserire il nuovo record.
Spero di essermi spiegata e che possiate aiutarmi.
Comunque vi ringrazio in anticipo

0v3rCl0ck Profilo | Guru

>Ciao a tutti.

Ciao

>Ho creato un database con sql con due tabelle collegate, ho creato
>2 form una per il protocollo e una per i contatti (le tabelle).
>Ora a me sevirebbe che quando sto immettendo i dati nella form
>protocollo e mi imbatto in un contatto non presente nella tabella
>contatti, l'applicazione mi chieda se desidero inserire il nuovo
>contatto e poi mi apre la form contatti per inserire il nuovo
>record.
>Spero di essermi spiegata e che possiate aiutarmi.

Non ho capito bene quando vorresti fare il controllo, il contatto come lo inserisci? Compili tutto il form e poi sul click del pulsante di salvataggio vuoi controllare se il contatto è inserito o meno?

>Comunque vi ringrazio in anticipo
>

Enjoy It

- Michael -
http://blogs.dotnethell.it/Regulator/

frrr7 Profilo | Newbie

Avevo l'impressione di non essermi spiegata bene...
Siccome quando inserico i dati nel form protocollo, e il dato contatto non corrisponde a un record gia inserito, non mi fa salvare.
praticamente quando ho un contatto nuovo, prima dovrei inserirlo nella form/tabella contatti e dopo in protocollo.
Io vorrei fare in modo che quando sto inserendo un nuovo record e mi imbatto in un nuovo contatto l'applicazione mi avverte (con un boxtext che mi chiede se voglio inserire un nuovo contatto) e se rispondo si mi fa inserire il contatto prima nella tabella/form contatti( compilandola) e quindi in quella protocollo.
Ma la tabella contatti vorrei che si aprisse da sola.
Effettivamente non so neanche se si può fare...
Spero di essere stata un po' più chiara
Ti ringrazio per il tuo interessamento

Lanello Profilo | Senior Member

ciao anche da parte mia vediamo se riesco ad aiutarti anche io

>Avevo l'impressione di non essermi spiegata bene...

anche in questo sei un po criptica ma vediamo se ho capito

>Siccome quando inserico i dati nel form protocollo, e il dato
>contatto non corrisponde a un record gia inserito, non mi fa
>salvare.

...

>praticamente quando ho un contatto nuovo, prima dovrei inserirlo
>nella form/tabella contatti e dopo in protocollo.

diciamo che si è capito quello che vuoi fare...

>Io vorrei fare in modo che quando sto inserendo un nuovo record
>e mi imbatto in un nuovo contatto l'applicazione mi avverte (con
>un boxtext che mi chiede se voglio inserire un nuovo contatto)

giusto per la cronaca il popup si chiama messagebox

>e se rispondo si mi fa inserire il contatto prima nella tabella/form
>contatti( compilandola) e quindi in quella protocollo.
>Ma la tabella contatti vorrei che si aprisse da sola.

ok.

>Effettivamente non so neanche se si può fare...

la risposta come in molti casi è SI, si può fare, ma vanno valutati alcuni aspetti della tua applicazione...

prima di tutto abbiamo bisogno di capire se nel tuo campo contatti che inserisci nella schermata di protocollo tu inserisci un cognome e nome, oppure una ragione sociale di una azienda (campo di testo libero) oppure se inserisci un codice cliente o cos'altro...

se il tuo inserimento è un inserimento a testo libero per effettuare il controllo bisognerebbe capire quando l'inserimento è terminato, perchè il software non può sapere da solo quando tu hai finito di scrivere i dati del contatto.

la soluzione a questo primo scoglio è che o mettiamo un bottone che l'operatore preme dopo aver terminato l'inserimento per convalidare il contatto, oppure facciamo il nostro controllo nel momento in cui l'operatore che inserisce i dati abbandona (con un tab sulla tastiera o con un clic su un'altro controllo della form) il nostro campo contatto.

deciso questo, è sufficiente scrivere una piccola routine che fa una query al nostro database in cerca del contatto che abbiamo digitato, e se esistente, fa proseguire l'inserimento dei dati di protocollo sulla prima schermata, altrimenti, se la query al database non trova nessuna corrispondenza, utilizzando un messagebox chiede all'utente se vuole effettuare o no l'inserimento del cliente.

se la risposta è si, crei un'istanza del form contatti e la apri in modalità DIALOG (detta anche MODALE), cioè che all'interno del tuo software fino a che quella finestra non è stata chiusa non puoi fare altro, e la finestra stessa se ne sta davanti a tutte le altre del tuo programma.


eccoti un po di codice...


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Spero di essere stata un po' più chiara
>Ti ringrazio per il tuo interessamento


spero di averti aiutato un po (ps se si accettami la risposta )

----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P

0v3rCl0ck Profilo | Guru

Ciao,

La risposta di lanello penso sia esaudiente.

Vorrei soltanto precisare che MsgBox fa parte del namespace specifico di visual basic e sconsiglio di utilizzare parti di tale namespace, sarebbe opportuno utilizzare MessageBox.Show presente nel namespace System.Windows.Forms.

Enjoy It

- Michael -
http://blogs.dotnethell.it/Regulator/

frrr7 Profilo | Newbie

Grazie mille funziona!
Siete stati davvero molto gentili!


frrr7 Profilo | Newbie

Ok come non detto, cioè devo essermi persa un passaggio.
Il messagebox appare sempre, anche quando iil contatto è inserito nel database, questo sicuramente perchè dovrei fare una query; il problema è: come la faccio? Io nel contatto ho un campo di testo libero( in pratica devo scivere l'intestazione di un azienda). Come faccio a fare la query?

0v3rCl0ck Profilo | Guru

>Ok come non detto, cioè devo essermi persa un passaggio.
>Il messagebox appare sempre, anche quando iil contatto è inserito
>nel database, questo sicuramente perchè dovrei fare una query;
>il problema è: come la faccio? Io nel contatto ho un campo
>di testo libero( in pratica devo scivere l'intestazione di un
>azienda). Come faccio a fare la query?
>

Bisogna capire su che database hai i dati (SQL, oracle, access, mysql, ecc...), e in basa a quello si sceglie il provider .NET che meglio si adatta al tuo caso, si imposta una connessione, e si eseguono le operazioni con i vari strumenti dati a disposizione da ADO.NET (Connection, Command, DataAdapter, ecc...).


- Michael -
http://blogs.dotnethell.it/Regulator/

Lanello Profilo | Senior Member

>Ok come non detto, cioè devo essermi persa un passaggio.
>Il messagebox appare sempre, anche quando iil contatto è inserito
>nel database, questo sicuramente perchè dovrei fare una query;
>il problema è: come la faccio? Io nel contatto ho un campo
>di testo libero( in pratica devo scivere l'intestazione di un
>azienda). Come faccio a fare la query?

come dice giustamente Michael ...

>Bisogna capire su che database hai i dati (SQL, oracle, access,
>mysql, ecc...), e in basa a quello si sceglie il provider .NET
>che meglio si adatta al tuo caso, si imposta una connessione,
>e si eseguono le operazioni con i vari strumenti dati a disposizione
>da ADO.NET (Connection, Command, DataAdapter, ecc...).

da come ci hai risposto, immagino che la "prima parte" di questo software non l'hai sviluppata tu, hai delle specifiche con cui è stato realizzato, oppure hai la possibilità di trovare nel codice sorgente un "pezzo" di codice che esegue un riempimento di una tabella (tipo quando fai una ricerca, e premi un tasto per trovare quello che hai cercato, nell'evento click di quel bottone c'è sicuramente una funzione per eseguire la query di ricerca) se ci copi/incolli sul forum un pezzetto di quel codice, molto probabilmente scopriamo come aiutarti per risolvere il tuo problema, e come insegnarti a utilizzare il tuo database per le prossime modifiche che dovrai fare
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P

frrr7 Profilo | Newbie

Allora, sto usando SQL Server 2005 (l'ho saricato con VB 2005 express, quindi penso che anche SQL sia la versione EXpress).
Per costruire il database e collegarlo ho usato le direttive di vb :
Public Class Form1

Private Sub ProtocolloBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProtocolloBindingNavigatorSaveItem.Click
Me.Validate()
Me.ProtocolloBindingSource.EndEdit()
Me.ProtocolloTableAdapter.Update(Me.Registro_ProtocolloDataSet.Protocollo)

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: questa riga di codice carica i dati nella tabella 'Registro_ProtocolloDataSet.Protocollo'. È possibile spostarla o rimuoverla se necessario.
Me.ProtocolloTableAdapter.Fill(Me.Registro_ProtocolloDataSet.Protocollo)

End Sub.

Lanello Profilo | Senior Member

>Allora, sto usando SQL Server 2005 (l'ho saricato con VB 2005
>express, quindi penso che anche SQL sia la versione EXpress).

ottimo

>Per costruire il database e collegarlo ho usato le direttive
>di vb :

il collegamento di cui parli si chiama binding (almeno sai cosa cercare)

>Public Class Form1
>
>Private Sub ProtocolloBindingNavigatorSaveItem_Click(ByVal sender
>As System.Object, ByVal e As System.EventArgs) Handles ProtocolloBindingNavigatorSaveItem.Click
> Me.Validate()
> Me.ProtocolloBindingSource.EndEdit()
>Me.ProtocolloTableAdapter.Update(Me.Registro_ProtocolloDataSet.Protocollo)

con queste righe sopra effettui il salvataggio dei dati che hai immesso nella tabella Protocollo

>
> End Sub
>
>Private Sub Form1_Load(ByVal sender As System.Object, ByVal e
>As System.EventArgs) Handles MyBase.Load
>'TODO: questa riga di codice carica i dati nella tabella 'Registro_ProtocolloDataSet.Protocollo'.
>È possibile spostarla o rimuoverla se necessario.
>Me.ProtocolloTableAdapter.Fill(Me.Registro_ProtocolloDataSet.Protocollo)

con questa riga all'avvio della finestra in questione effettui il caricamento di tutta la tabella Protocollo per poi poter scorrerne i record a tuo piacimento

>
> End Sub.
>

ma veniamo a noi...

sicuramente nella tua interfaccia grafica della schermata protocollo avrai un campo di testo (textbox) che riguarda il nostro famigerato contatto

facendo doppio clic (nella schermata di progettazione dell'interfaccia dentro vs.2005) ti verrà automaticamente creata una funzione che servirà a gestire l'evento "textchanged" (vale a dire che ogni volta che il testo all'interno della casella verrà cambiato il vs.2005 provvederà ad eseguire i comandi all'interno di questa funzione), bene, questo evento però non è quello che a noi interessa, come ti ho scritto in precedenza dobbiamo gestire l'evento che avviene quando l'utente con un clic o con un TAB sulla tastiera ESCE da quella casella di testo, quindi, in vs.200x quando sei dentro la funzione appena creata (anche se inutile) che gestisce il textchanged, se apri il menù a tendina destro posto sopra al codice puoi navigare fra gli eventi disponibili per quel controllo; dovrai selezionare LostFocus, appena selezioni quella voce, il vs.200x ti creerà automaticamente la funzione relativa a quell'evento. dentro a quella funzione dobbiamo cercare nella nostra tabella contatti se il contatto appunto è già esistente o no nel nostro database.

utilizzando la funzione Find del binding puoi facilmente sapere se un record è presente in una tabella oppure no, come descritto alla pagina di riferimento ufficiale che ti riporto

http://msdn.microsoft.com/it-it/library/ms158165.aspx

l'esempio calzante per il tuo programma dovrebbe essere tipo:

trovato=Me.ContattiBindingSource.Find("nomecampo","testo_da_cercare")

dove con "nomecampo" devi specificare il nome che hai dato con sqlexpress al campo che contiene la ragione sociale del contatto, e "testo_da_cercare" sarà il tuo textbox tipo txt_contatto.text


spero di essere riuscito a farti capire qualcosa


----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5