Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to determine the field a textbox is bound to
Message
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Environment versions
Environment:
VB 8.0
OS:
Vista
Network:
Windows XP
Database:
Jet/Access Engine
Application:
Desktop
Miscellaneous
Thread ID:
01487443
Message ID:
01487653
Views:
41
Hi Viv,

It's shorter, it's more elegant, and it works.

Thanks a lot.

Marc

PS : it does not solve my conundrum that B.Datasource turns out to be a BindingSource that steadfastly refuses to divulge to which table the field belongs to which the control is bound.


>Will this do what you need:
Friend Sub MasKit(ByVal cols As DataColumnCollection)
>        For Each Ctrl In Me.Controls
>            If (TypeOf Ctrl Is IControlMaskit) Then
>                CType(Ctrl, IControlMaskit).MaskIt(cols)
>            End If
>        Next
>    End Sub
   Friend Sub MaskIt(ByVal cols As DataColumnCollection) Implements IControlMaskit.MaskIt
>        If Me.Mask <> "" Then
>            Exit Sub
>        End If
>
>        Dim B As Binding = Me.DataBindings.Item(0)
>
>        Dim O As Object = B.DataSource
>        If Not (TypeOf O Is DataTable) Then
>            O = CType(O, DataView).Table
>        End If
>
>        Dim c As DataColumn = CType(O, DataTable).Columns(B.BindingMemberInfo.BindingField)
>
>        Select Case c.DataType
>            Case GetType(System.String)
>                ' Possible error since MaxLength can be negative.....
>                Me.Mask = ">" & New String("A", c.MaxLength)
>            Case GetType(System.DateTime)
>                Me.Mask = ">##/AAA/##"
>        End Select
>    End Sub
If not then at least it's a bit shorter (s)
>
>>
>>    Private Sub frmXXX_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
>>        Me.MasKit(Me.XXXDataset.XXX.Columns)
>>    End Sub
>>
>>
>>so, cols is really Me.XXXDataset.XXX.Columns is a DataColumnCollection, belonging to a datatable ... I think.
>>
>>in my baseform I have :
>>
>>    Friend Sub MasKit(ByVal cols As DataColumnCollection)
>>        Dim ctrl2 As IControlMaskit = Nothing
>>        For Each Ctrl As Control In Me.Controls
>>            Dim lApplicable As Boolean = True
>>            Try
>>                ctrl2 = Ctrl
>>            Catch 
>>                lApplicable = False
>>            End Try
>>            If lApplicable Then
>>                ctrl2.MaskIt(cols)
>>            End If
>>        Next
>>    End Sub
>>
>>
>>and at the txtBase level (inferring from your wise advice ...)
>>
>>
>>    Friend Sub MaskIt(ByVal cols As DataColumnCollection) Implements IControlMaskit.MaskIt
>>        If Me.Mask <> "" Then
>>            Exit Sub
>>        End If
>>
>>        Dim B As Binding = Me.DataBindings.Item(0)
>>        Dim t As DataTable = CType(B.DataSource, DataTable)
>>        Dim c As DataColumn = Nothing
>>
>>        If t Is Nothing Then
>>            Dim t1 As DataView = B.DataSource
>>            c = t1.Columns(B.BindingMemberInfo.BindingField)
>>        Else
>>            c = t.Columns(Me.DataBindings.Item(0).BindingMemberInfo.BindingField)
>>        End If
>>
>>        ' Dim o As DataColumn = cols(Me.DataBindings.Item(0).BindingMemberInfo.BindingField)
>>        Dim cT As String = c.DataType.ToString
>>        If cT = "System.String" Then
>>            Me.Mask = ">" & New String("A", c.MaxLength)
>>            Exit Sub
>>        End If
>>        If cT = "System.DateTime" Then
>>            Me.Mask = ">##/AAA/##"
>>            Exit Sub
>>        End If
>>        MsgBox(Me.Name & " cannot be masked yet (" & cT & ")")
>>    End Sub
>>
>>
>>Now this won't compile because "columns is not a member of 'system.data.dataview', and leaving out the dataview section does not work. (I don't think I need the dataview section). When I debug, B.Datasource does not seem to be set (in fact it returns "nothing", your "null" I guess?)
>>
>>I get the feeling from what I read in my frmXXX.designer.vb that the datasource of the "binding" is a dataset, whereas you seemed to assume that it should be a datatable or a dataview.
>>
>>That is precisely the problem I guess, because the form generates a xxxdataset that and binds the controls to a datatable that belongs the xxxDataset and is called XXX and referred to as xxxDataset.xxx. And it's the latter that I would like get a hold of from my base class textbox.

If things have the tendency to go your way, do not worry. It won't last. Jules Renard.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform