Il linguaggio Visual Basic di Microsoft
 

TableAdapterManager tipizzato come proprietà di un

Sacman 14 Set 2015 21:12
Buongiorno. Sicuramente esiste una soluzione migliore di quella che ho trovato
io, ma comunque posto il quesito.
Per sostituire la classe ComboBox predefinita, che ha una serie di limitazioni,
fra le quali il fatto che non sia possibile metterla in ReadOnly (non esiste
tale proprietà per la classe ComboBox), ho pensato di creare un mia classe
myTextBoxExtra, che altro non e' che un UserControl, con un Button e 2 TextBox.
Il Button mi servirebbe per aprire un form ad elenco di inserimento, mentre i
TextBox1 e' collegato al bingingsource dell'Usercontrol.
Fin qui tutto OK. La mia esigenza e' quella di associare il TextBox2 ad una
seconda origine dati, che visualizzi un DisplayMember.
Per generalizzare l'Usercontrol, il TableAdapterManager dovrebbe essere passato
come property e obJAdapert aggiornare la objDataSet.DataTable opportuna, che ho
selezionato da designer modificando il campo proprieta' myTableAdapterManager.
Vedere codice allegato:

Public Class myTextBoxExtra
Dim objDataView As DataView
Dim objDataSet As New dataDataSet
Dim objRow As DataRowView
Dim objAdapter As dataDataSetTableAdapters.LstProvincieTableAdapter

Dim _DataSource As BindingSource
Public Property myDataSource As BindingSource
Get
Return _DataSource
End Get
Set(ByVal value As BindingSource)
_DataSource = value
End Set
End Property

Dim _ValueMember As String
Public Property myValueMember As String
Get
Return _ValueMember
End Get
Set(ByVal value As String)
_ValueMember = value
End Set
End Property

Dim _DisplayMember As String
Public Property myDisplayMember As String
Get
Return _DisplayMember
End Get
Set(ByVal value As String)
_DisplayMember = value
End Set
End Property

Dim _TableAdapterManager As dataDataSetTableAdapters.TableAdapterManager
Public Property myTableAdapterManager As
dataDataSetTableAdapters.TableAdapterManager
Get
Return _TableAdapterManager
End Get
Set(ByVal value As dataDataSetTableAdapters.TableAdapterManager)
_TableAdapterManager = value
End Set
End Property

Private Sub myTextBoxExtra_BindingContextChanged(ByVal sender As Object,
ByVal e As System.EventArgs) Handles Me.BindingContextChanged
'Me.MyTextBox2.DataBindings.Add(New Binding("Text", Me.myDataSource,
Me.myDisplayMember, Me.DataBindings.Item(0).FormattingEnabled,
System.Windows.Forms.DataSourceUpdateMode.OnValidation, Nothing,
Me.DataBindings.Item(0).FormatString))

End Sub


Private Sub myTextBoxExtra_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
'MsgBox(myTableAdapterManager.Container.Components.Item(0).Site)
MsgBox(MsgBox(Me.myTableAdapterManager.Container.Components.Item(0)))
If Me.DataBindings.Count > 0 Then
Me.MyTextBox1.DataBindings.Add(New Binding("Text",
Me.DataBindings.Item(0).DataSource,
Me.DataBindings.Item(0).BindingMemberInfo.BindingField,
Me.DataBindings.Item(0).FormattingEnabled,
System.Windows.Forms.DataSourceUpdateMode.OnValidation, Nothing,
Me.DataBindings.Item(0).FormatString))
Me.MyTextBox2.DataBindings.Add(New Binding("Text", Me.myDataSource,
Me.myDisplayMember, Me.DataBindings.Item(0).FormattingEnabled,
System.Windows.Forms.DataSourceUpdateMode.OnValidation, Nothing,
Me.DataBindings.Item(0).FormatString))
End If

End Sub


Private Sub MyTextBox1_TextChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyTextBox1.TextChanged

Dim itemFound As Integer = Me.myDataSource.Find(Me.myValueMember,
Me.MyTextBox1.Text)
If itemFound > 0 Then
objDataView = New
DataView(objDataSet.Tables(myDataSource.DataMember))
objAdapter = New dataDataSetTableAdapters.LstProvincieTableAdapter

objAdapter.Fill(objDataSet.LstProvincie)
objRow = objDataView.Item(itemFound)
Me.MyTextBox2.Text = objRow.Item(Me.myDisplayMember)
Else
Me.MyTextBox2.Text = ""
End If


End Sub
End Class
Luca D 14 Set 2015 22:00
On Monday, September 14, 2015 at 9:52:21 PM UTC+2, Paperino wrote:
>
> Non so se e quanto la cosa ti possa aiutare, ma con una
> rapida guglata ho trovato un paio di soluzioni almeno
> a questo specifico problema... poi ovviamente ce ne saranno
> altri, ma intanto, nel KeyPress puoi mettere un "e.Handled = true"
> oppure nel KeyDown un "e.SuppressKeyPress = true".
>

Senza contare che si può b*****mente impostare in modalità DropDownList, se
uno non vuole proprio avere il TextBox editabile...
Sacman 14 Set 2015 22:43
> Non so se e quanto la cosa ti possa aiutare, ma con una
> rapida guglata ho trovato un paio di soluzioni almeno
> a questo specifico problema... poi ovviamente ce ne saranno
> altri, ma intanto, nel KeyPress puoi mettere un "e.Handled = true"
> oppure nel KeyDown un "e.SuppressKeyPress = true".
Questo e' interessante per scavalcare il problema del readonly..


> E la domanda...?
La domanda e'. E' possibile passare un TableAdapter tipizzato, come proprietà
di una istanza di un Usercontrol o in generale di una classe? Trascino il mio
UserContol nel Form desiderato, setto le proprieta' myTableAdapterManager,
selesionando dall'elenco dei TableAdapter tipizzati quello che voglio usare, per
poi nel codice del controllo andare a gestire in modo generico la proprietà, in
modo che sia riutilizzabile...
In pratica il mio problema e' che non voglio scrivere qualcosa del genere:

objAdapter = New dataDataSetTableAdapters.LstProvincieTableAdapter
objAdapter.Fill(objDataSet.LstProvincie)

perchè e' esplicito, vorrei che .LstProvincieTableAdapter e .LstProvincie
fossero settate a livello di proprietà, in modo da cambiarle per ogni istanza
del controllo....

objAdapter.Fill(objDataSet.LstProvincie) non e' un problema perche' posso
scrivere:
objAdapter.Fill(objDataSet.Tables("me.MyDataTable")
dove MyDataTable e' una property, settata a "LstProvincie" in fase di Design.

objAdapter = New dataDataSetTableAdapters.LstProvincieTableAdapter
e' lo scoglio perche' non so come passarlo come property.
Sacman 14 Set 2015 22:45
> Senza contare che si può b*****mente impostare in modalità DropDownList, se
uno non vuole proprio avere il TextBox editabile...

Ma DropDownList non rende non editabile il controllo, impedisce di selezionare
qualcosa al di fuori dell'elenco e non e' per niente la stessa cosa..

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio Visual Basic di Microsoft | Tutti i gruppi | it.comp.lang.visual-basic | Notizie e discussioni visual basic | Visual basic Mobile | Servizio di consultazione news.