Mi sono incartato e non ho notato un problema. La mia situazione è la seguente:
Ho una collection di miei oggetti (Commesse) che viene popolata attraverso delle chiamate ad un DB. Per filtrare devo filtrare i dati di questa collection permettendo all'utente di scegliere il campo ed il valore da filtrare (dalla data commessa alla data commessa, il cliente, l'articolo, ecc...). Per fare ciò ho creato una classe Filtro dove ogni proprietà è un valore che posso usare nella chiamata SQL (fondamentalmente i parametri della stored procedure che restituisce i dati).
A differenza degli oggetti Commessa che hanno anche tipi complessi (Dim c as New Cliente) la classe filtro ha solo tipi "primitivi" (anche se così non è corretto, per capirci) come Integer, String, Double.... Nella Form Commesse ho un DataGridView che mostra i dati della collection preimpostando il filtro a dei valori di default. Per cambiare questo filtro ho creato una Form con vari controlli per i quali ho fatto il binding alle proprietà dellìoggetto filtro. Finchè si tratta di tipi di dato "primitivi" tutto funziona correttamente, ma quando si tratta di oggetti entro in crisi. Metto il codice per essere più chiaro...
Public Class FiltroCommesse
'...varie variabili private fra cui...
Private _Cliente As String
Private _DescrizioneCliente As String
'...varie proprietà fra cui...
Public Property Cliente() As String
Get
Return _Cliente
End Get
Set(ByVal value As String)
_Cliente = value
End Set
End Property
Public Property DescrizioneCliente() As String Implements IFiltroCommesse.DescrizioneCliente
Get
Return _DescrizioneCliente
End Get
Set(ByVal value As String)
_DescrizioneCliente = value
End Set
End Property
End Class
Un'istanza di questa classe viene caricata quando apro il form dove gestisco le commesse. In questo Form posso cambiare questo filtro richiamando un ulteriore form che contiene vari controlli, fra cui un textbox dove viene inserito il cliente (che ho lockato -Locked=True-). Il codice del form è il seguente:
Per popolare la textbox dei clienti richiamo un ulteriore form attraverso la collection dei clienti con la quale li visualizzo tutti. Il fatto è che, per comodità, la form dei clienti espone un DataGridView: il metodo SetControl, nella collection, è il seguente:
Public Class Clienti
Inherits BindingList(Of Cliente)
Protected _adapter As AdapterClienti
Private _filtro As FiltroClienti
Sub New()
_filtro = New FiltroClienti
Try
_adapter = New AdapterClienti()
Catch ex As Exception
Throw ex
End Try
Popola()
End Sub
Protected Overridable Sub Popola()
For Each cl As IClienteDB In _adapter.GetClienti(_filtro)
Me.Items.Add(New Cliente(CType(cl, IClienteDB)))
Next
End Sub
Public Overridable Sub SetControl(ByVal c As System.Windows.Forms.Control)
Dim ff As New ListaClientiForm(Me, c)
ff.ShowDialog()
ff.Dispose()
Me.Items.Clear()
Popola()
End Sub
'... Altri metodi, funzioni e proprietà...
End Class
Nella form ListaClientiForm ho un DataGridView che mostra tutti i clienti ed ogni riga è un'istanza della classe Cliente. Facendo doppio click sulla riga ottengo il cliente e assegno i dati al TextBox. Il codice che uso nella form ListaClientiForm è il seguente:
Dopo tutto questo macchinoso lavoro ottengo quello che voglio ottenere salvo che quando rientro nel form FiltroCommesseForm la descrizione del Cliente non compare nel textbox (ma il tag è correttamente inizializzato). Temo che ci siano dei problemi nell'assegnazione del Binding, tipo che 2 binding sullo stesso controllo non funzionano (ma non ho trovato documentazione in merito).
Grazie di aver avuto pazienza di leggere tutto!!! Help me
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole