Winform su più records

martedì 29 marzo 2011 - 16.59
Tag Elenco Tags  VB.NET  |  Visual Studio 2010

disa Profilo | Newbie

Salve,

vorrei proporvi un quesito che personalmente vorrei risolvere ma non ci riesco.

Supponiamo di dover utilizzare una tabella esistente e che quindi non possiamo ridisegnare fatta in questo modo

-----------------------------------------------------------------
ID VarName Valore Lotto Data
1 Diametro 10.5 12345 20050101
2 Spessore 4.5 12345 20050101
3 Raggio 3.2 12345 20050101
4 Diametro 10.5 12346 20050102
5 Spessore 3.5 12346 20050102
6 Raggio 3.5 12346 20050102
7 Diametro 9.5 12347 20050103
8 Spessore 8.5 12347 20050103
9 Raggio 2.5 12347 20050103


L'applicazione di raccolta dati del cliente necessita di avere una interfaccia con tanto di navigazione tra i records e funzionalità Insert/Update/Delete, con l'utilizzo di dataset e bindingsource in ambiente VisualStudio 2010 in VB.NET e SQLServer 2005 Express. Quindi sembra niente di speciale.

Veniamo al problema; come faccio ad avere queste funzionalità in una WinForm che nella stessa schermata contiene le seguenti textboxes: Lotto, Data, Diametro, Spessore, Raggio? Ripeto con funzionalità di navigazione e salvataggio.

Chiaro che se fosse possibile utilizzeremmo una Master-Details ma così non è possibile.
Quindi ricapitoliamo una sola Winform con textboxes (come se fosse una vista di dettaglio del nostro dataset) con navigazione e trattamento dati nel DB.

Nell'esempio con la tabella che ho descritto ci sarebbero 3 records.

Spero di essere stato chiaro e che qualcuno mi dia un suggerimento.

Saluti
Gabriele

niccord Profilo | Newbie

Puoi usare lo strumento di progettazione delle windows form di visual studio.
Quello che ti serve sono un dataset, un binding source, un datagridview e le label e textbox varie.

Colleghi il binding source al dataset e alla datatable che vuoi usare e poi colleghi il datagridview al binding source.
Altra cosa che ti conviene fare è "bindare" i campi text delle textbox ai valori dei binding source così quando cambia la selezione nel datagridview, cambiano di conseguenza i valori delle caselle.

Poi ti servono dei pulsanti che cambino lo stato in cui ti trovi: inserisci, modifica, elimina, salva e annulla.

Il pulsante inserisci farà un bindingsource.addnew() (così si "puliscono" i campi per l'inserimento) e sbloccherà il pannello in cui si trovano le textbox, ecc.
La modifica sbloccherà i campi tranne quello dell'id (se compare).
L'elimina cancellerà il dato selezionato.

Il salva controllerà che i dati siano corretti e scriverà sul db.
Il pulsante annulla, annullerà le modifiche.

disa Profilo | Newbie

Grazie della risposta.
Questa è la cosa che di solito si fa ma se guardi bene la struttura della tabella vedi che non è cosi semplice.

La tabella ha una colonna che ha il nome della variabile quindi se fai il bind del campo vedi che non puoi avere le 3 variabili contemporaneamente. Se aggiungi un record puoi metterci 1 variabile non 3. Ti basterebbe comprendere che lo spostamento di un record è in realtà lo spostamento di 3 (perchè sono 3 variabili in cui raccogliere dati).

Quello che devo avere è 3 campi textbox la cui label è in realtà il nome della variabile contenuta nel record (es: Diametro).

Magari per qualcuno non sarà difficile e ha gia una soluzione ma finora non ho mai visto nei vari forum una soluzione.

Spero di aver chiarito la mia richiesta.

Saluti
Gabriele

niccord Profilo | Newbie

Ora mi è più chiaro. Secondo me le soluzioni che hai sono due:

1 - tratti le righe singolarmente. l'utente si preoccuperà di fare 3 inserimenti.
2 - da query "combini" le righe. Il tuo dataset avrà una struttura simile a questa:

ID ValoreDiametro ValoreSpessore ValoreRaggio Lotto Data
1 10.5 4.5 3.2 12345 20050101

disa Profilo | Newbie

Quindi mi dici di utilizzare ADO.NET anzichè il databinding?
Con tutte le modifiche di gestione, beh è un bel lavoraccio.

Inoltre il passo conclusivo era quello di avere delle form dinamiche ed il numero delle variabili avrebbero potuto variare in base al lotto di produzione.
Mah, mi sa che si ritorna punto a capo. Certo la tua è una soluzione ma pensavo/speravo vi fosse qualcosa di meglio.

Se qualcuno vuole aggiungere qualcosa?

Grazie

niccord Profilo | Newbie

Puoi continuare ad usare il databinding perché il lavoro di "combinazione" delle righe lo puoi fare in una stored procedure.
Un altro svantaggio è il dover fare n insert, n update ed n delete per ogni riga.
Non mi viene in mente altro e non conosco alcuno strumento che possa aiutarti..almeno però, come hai detto tu, una soluzione (per quanto scomoda) esiste.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5