ListBox

martedì 30 ottobre 2007 - 18.39

Miles Profilo | Newbie

Come si fa a far prendere in ingresso ad una funzione dei dati che provengono dalla listbox ?

StefanoLep Profilo | Senior Member

Ciao, non è molto chiara la domanda...



Solo chi fa sbaglia :-)

Miles Profilo | Newbie

Ciao, grazie x l'interessamento. Cerco di spiegarmi meglio.
Devo gestire una videoteca, x cui quando un cliente, identificato da un proprio id,effettua una ricerca(x film,attore,regista o quel che sia)vengono visualizzati i risultati su una listBox(per chiarezza il datasource è un Arraylsit).
Io devo fare in modo che il cliente selezioni una riga dela listBox, che rappresenta il film che vuole prenotare, e succesivamente premendo un Button "prenota", devo inserire l' id_cliente,l' id_film e la data di prenotazione in una tabella "prenotazioni" x tenere traccia del film prenotato e del cliente che ha effettuato la prenotazione.
Il mio problema è che nn so come passargli alla funzione "prenota" l'id_film e l'id cliente:
- l'id_film dovrei ricavarlo direttamente dalla listBox in modo automatico senza che il cliente lo scriva esplicitamente, ma deve solo selezionare il film che gli interessa e premere il pulsante prenota,x cui penso debba utilizzare le proprietà ValuMember e DisplayMember, anche se nn so di preciso come funzionano.
- l'id_cliente dovrei ricavarlo dalla prima Form in cui viene effettuato il login, per cui dovrei memorizzarlo in una var locale e poi passarlo alla form riguardante la prenotazione, ma nn so come passarglielo.

Questo è quanto.Spero sia stato + chiaro , ma soprattutto spero di ottenere una risposta.
Ciao Miles

StefanoLep Profilo | Senior Member

L'ID_Cliente ti conviene impostarlo su una variabile pibblica così lo vedi anche da altre form (FormCliente.VariabileIdCliente).
Per quello che riguarda la Listbox il valore che vuoi ottenere lo ricavi da listbox1.SelectedValue, se ancora qualcosa non va puoi postare il codice che utilizzi per caricare la listbox.

Solo chi fa sbaglia :-)

Miles Profilo | Newbie

Il codice da me scitto è il seguente.
Per la gestione del'evento button "Cerca Film":

listBox.ValueMember="id_film"; dove id_film è un campo della tabella Film
listBox.DataSource=ws.RicercaFilm(textBox.Text); dove ws sta per il mio Web Service

Per gestione dell'evento button "prenotaFilm":

int var = Int32.Parse(listBox.SelectedValue.Tostring());
ws.prenotafilm(var);
Qunando premo il pulsante "Cerca" mi visualizza i miei film,però quando premo il pulsante "Prenota" mi manda alla riga

int var = Int32.Parse(listBox.SelectedValue.Tostring());

dicendomi che la string in input nn è nel formato corretto!!!
Perchèèèè?????

StefanoLep Profilo | Senior Member

listBox.SelectedValue che valore ha quando ti da questo messaggio? Penso che il valore sia nothing, da cui l'errore.
Per caricare una listbox dovresti avere un codice tipo questo:

.DataSource = MyBindingSource
.DisplayMember = "TitoloFilm"
.ValueMember = "IdFilm"


Solo chi fa sbaglia :-)

Miles Profilo | Newbie

A quanto ho capito mi vuoi dire che è sbaglato l'ordine del codice, cioè devo prima caricare e poi selezionare l'ogetto,cioè

.datSource=ws.ricercafilm(textbox.text);
.displaymember="titolo";
.valuemember="id_film";

ma facendo il debug mi manda alla riga

.valuemember="id_film";

dicendomi:
Cannot bind to the new display member.
Parameter Name: newDisplyMember

Forse sbaglio il mondo in cui carico la lista, il datasource???? nn penso...tu che dici.

StefanoLep Profilo | Senior Member

Quest funzione ws.ricercafilm(textbox.text) che cosa restituisce?

Solo chi fa sbaglia :-)

Miles Profilo | Newbie

Un arraylist in cui vengono visualizzati tutti i campi :id_film,Titolo,Durata,Attore,Regista,Disponibilità

Miles Profilo | Newbie

E quindi? scusami ma sei l'unica persona che può aiutarmi!!!!!

StefanoLep Profilo | Senior Member

Hai postato nella sezione per VB6..., prova in quella di .Net magari specificando C# come linguaggio, a parte questo provo in questo lungo ponte a dare un'altra occhiata al codice, anche se il problema mi sembra sempre più nel datasource, una verifica in questo senso la puoi avere impostando il datasource su una tabella che contiene "IdFilm" e "Titolo" e verificare che in questo modo la proprietà selectedvalue sia correttamente valorizzata.
Ciao :-)


Solo chi fa sbaglia :-)

StefanoLep Profilo | Senior Member

Credo di aver capito il problema, tu imposti dirrettamente l'arraylist come datasource e quindi nella proprietà ValueMember non c'è mai niente, ti allego un pò di codice che dovrebbe chiarirti un pò la situazione

'creo prima una classe film con le proprità che mi servono 'in questo esempio c'è anche genere che sulla listbox non mostrerò Public Class Film Private FilmName As String Private IDFilm As Integer Private GenereFilm As String Public Sub New(ByVal name As String, ByVal id As Integer, ByVal genere As String) FilmName = name IDFilm = id GenereFilm = genere End Sub Public ReadOnly Property Name() As String Get Return FilmName End Get End Property Public ReadOnly Property Id() As Integer Get Return IDFilm End Get End Property Public ReadOnly Property Genere() As Integer Get Return GenereFilm End Get End Property Private Sub CaricaList() Dim myFilms As New ArrayList ' Aggiungere le voci della struttura del reparto all'elenco matrice With myFilms .Add(New Film("Pippo", 1, "Fantasy")) .Add(New Film("Pluto", 44, "Horror")) .Add(New Film("Paperino", 283, "Commedia")) .Add(New Film("Topolino", 66, "Azione")) End With ' Eseguire l'associazione dell'elenco matrice alla casella combinata With ListBox1 .DataSource = Nothing .DataSource = myFilms 'le proprità pubbliche della classe sono quello che posso legare .DisplayMember = "Name" .ValueMember = "Id" End With End Sub End Class

Ciao, alla prossima :-)


Solo chi fa sbaglia :-)

Miles Profilo | Newbie

....in Visul Basic? io devo programmare in c#.Cmq vedrò lo stesso di capire qcs.

Cmq si, imposto dirrettamente l'arraylist come datasource,cercherò anche di capire perchè
nella proprietà ValueMember non c'è mai niente.
Buonanotte!

StefanoLep Profilo | Senior Member

In questo link puoi aver la traduzione C#-->VB e viceversa:
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx

private void CaricaList() { ArrayList myFilms = new ArrayList(); // Aggiungere le voci della struttura del reparto all'elenco matrice myFilms.Add(new Film("Pippo", 1, "Fantasy")); myFilms.Add(new Film("Pluto", 44, "Horror")); myFilms.Add(new Film("Paperino", 283, "Commedia")); myFilms.Add(new Film("Topolino", 66, "Azione")); // Eseguire l'associazione dell'elenco matrice alla casella combinataListBox1 Listbox1.DataSource = null; Listbox1.DataSource = myFilms; Listbox1.DisplayMember = "Name"; Listbox1.ValueMember = "Id"; } public class Film { private string FilmName; private int IDFilm; private string GenereFilm; public Film(string name, int id, string genere) { FilmName = name; IDFilm = id; GenereFilm = genere; } public string Name { get { return FilmName; } } public int Id { get { return IDFilm; } } public int Genere { get { return GenereFilm; } } }

Buonanotte

Solo chi fa sbaglia :-)

Miles Profilo | Newbie

Stefano, grazie tantissimo per la tua disponibilità e celerità nelle risposte.
Il Code translator è veramente una chicca!
Cmq ho visto il tutto è notato il modo incui carchi la lista; io faccio diversamente

listBox.dataSource= ws.RicercaTitoloFilm(txt.Text);

perchè richiamo la funzione prenota dal mio WebService che a sua volta instanzia una classe che si trova in una Class Library, la quale mi restituisce un ArrayList.
Però ho anche notato che scrivendo come segue

listBox.dataSource= ws.RicercaTitoloFilm(txt.Text);
listBox.ValueMember= "id_film";

una volta eseguito il debug mi manda alla riga

listBox.ValueMember= "id_film";

il Valuemember è vuoto!
Mentre se scrivo:

listBox.ValueMember= "id_film";
listBox.dataSource= ws.RicercaTitoloFilm(txt.Text);

mi da problemi nella riga successiva , ossia

int p= Int32.Parse(listBox.SelectedValue.Tostring());

dicendomi che la stringa in ingreso nn è nel formato corretto.
Scrivo cosi xkè da quanto ho capito il valuemember mi restituisce una stringa, mentre l'id_film è un intero.
Poi questa variabile "p" la uso come parametro da passare ad una funzione "prenota",nel modo seguente

ws.Prenota(p);

anche se in realtà a questa funzione prenota dovrò passare pure l'id_cliente che devo prelevare dalla prima form in cui il cliente effettua il login, e quindi nasce anche il problema di come passare una variabile da una form ad un'altra.






StefanoLep Profilo | Senior Member

Per passare una variabile tra un form e l'altro basta renderla pubblica
In FormUtenti: Public ID_Utente as integer ..... ID_Utente = X da FormFilm la richiamo come FormUtenti.ID_Utente.

Il vero scoglio è quello di valorizzare ValueMember e finchè imposti la proprietà DataSource direttamente sull'array che ti viene dal tuo WS non funziona. Nel codice che ti ho postato l'arraylist viene caricato con oggetti film e le proprità ValueMember e DisplayMember puntano alle proprietà dell'oggetto film, quindi credo che dovresti trovare il modo di prendere l'arraylist che ti ritorna il WS e caricare un ArrayList di oggetti film.

Solo chi fa sbaglia :-)

Miles Profilo | Newbie

Ciao Stefano, ho risolto il problema.

Il tipo di ritorno della funzione Ricerca Film è un generico di tipo List<Film>; i risultati li visualizzo tramite un DataGridView, il cui DataSource è proprio ws.RicercaFilm(txt.Text).
Poi x ricavare l'id del film faccio questo:

int i = Int32.Parse(datagridview1["idfilmDataGridViewTextBoxColumn",dataGridView1.CurrentCell.RowIndex].Value.Tostring());

id_film che do in ingresso alla funzione Prenota...e funziona!

Ora il problema è che alla stessa funzione devo passare l'id_cliente che come ti dicevo dovrei ricavare dalla prima form.
Ho provato a fare come mi hai detto tu, cioè nella Form1 ho scritto

public int idc;
idc= ws.Converti(txt.Text);

e nella Form in cui vorreiutilizzarla

Form1.idc...

ma niente da fare!

Cosa posso fare?
Grazie Miles

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