none
Control : connaitre le type du champs lié (databinding) RRS feed

  • Question

  • Bonjour,

     

    Jai un formulaire d'accès aux données (BD sql server) , comportant divers controles (TextBox, ListBox). Et j'aimerais connaitre pour chaque controle le type du champs lié à celui. Exemple pour un TextBox lié avec un champ "Montant" de type Integer de ma Base de données, j'aimerai pouvoir identifier que l'objet TextBox necessite une données de type Integer !

     

    Merci d'avance

     

    Thierry

    jeudi 5 avril 2007 06:56

Toutes les réponses

  • Salut

    Pour verifier les champs ou textbox que l'utilisateur doit renseigner, tu as l'outil ErrorProvider qui est disponible.

    Voici un exemple de code comment utiliser ErrorProvider , sinon tu fais tu poses un ErrorProvider1 sur ta from et tu fais dessus F1, tu auras d'autres exemples.

     

    Moi je fais comme ça:

    Tu poses un ErrorProvider1 sur ta page.

     

    #Region "Error Provider"

    Dim errorMsg As String = ""

     

    Private Sub TextBoxPrix_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBoxPrix.Validating

    Label10.Text = ""

    If Not ValidPrix(TextBoxPrix.Text, errorMsg) Then

    e.Cancel = True

    TextBoxPrix.Select(0, TextBoxPrix.Text.Length)

    Me.ErrorProvider1.SetError(TextBoxPrix, errorMsg)

    End If

    End Sub

    Private Sub TTextBoxPrix_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBoxPrix.Validated

    ErrorProvider1.SetError(TextBoxPrix, "")

    End Sub

     

    Private Function ValidPrix(ByVal Texte As String, ByRef errorMessage As String) As Boolean

    Dim Chiffre As Decimal

    Try

    Chiffre = Texte

    If Texte >= 0 Then

    Return True

    Else

    errorMessage = "Le champs doit être supérieur ou égale à zéro."

    Return False

    End If

    Catch ex As Exception

    If Texte = "" Then

    Return True

    Else

    errorMessage = "Le champs doit être numérique."

    End If

    End Try

    End Function

     

    #End Region

     

    C'est dans Private FunctionValidPrix (....) , que tu lui fais faire les tests de ce que tu veux , ex: >=0 , non vide, que ce soit bien du numérique etc

     

    Tu as aussi le MaskedTextBoxCodeBarre, pour les telephones ou code postal , moi je l'utilise pour entrer le numéro d'un code barre article qui doit contenir des chiffres uniquements et au nombres de 13. il faut le parametrer sur MASK il y a des exemples aussi.

     

    A+

     

     

    jeudi 5 avril 2007 08:21
  • Ouais ta solution est pas mal, mais je prefererai faire un truc un peu plus general et generique car jai une quinzaine de formulaire, donc une centaine de champs a verifier ...

     

    Du genre :

     

     

    For Each CheckingControl As Control In Me.InputZone.Controls

      Cast(CheckingControl.Text, (Me.DB_CMDDataSet.tbl_chantier.Columns(Me.PkTextBox.DataBindings(0).BindingMemberInfo.BindingField).DataType) )

    Next

     

    InputZone.Controls --> Panel

    CheckingControl --> Peut etre un TextBox, LisBox

    BindingField --> le champ (colonne) de la table

     

    le truc va checker tous les controls dans le panel pour verifier si le text du control peut etre converti dans le type demandé par la table, sinon lancement d'exception, qui plus tard peut etre traiter pour afficher un msg avec le errorProvider.

     

    Le seul probleme est que DataType n'est pas reconnu en tant que Type ... ce qui est assez bizzare ...

     

    @ +

     

    Thierry

     

    jeudi 5 avril 2007 08:36
  • Ouais c'est vrai que c'est bizarre, car la propriété DataType est considéré comme un Type. Es-ce que tu sais quel est la valeur que retourne ton DataType?

     

    Ref: http://msdn2.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx

    jeudi 5 avril 2007 12:31
    Modérateur
  • Il me sort des truc genre Int32 (du type : "Type")

     

    Mais si j'utilise Convert (Object, Type) au lieu de TryCast (object, Type) ou Ctype( object, Type) ca fonctionne :

     

    Convert.ChangeType(CheckingControl.Text, DB_CMDDataSet.tbl_chantier.Columns(CheckingControl.DataBindings(0).BindingMemberInfo.BindingField).DataType)

     

    Bref, c'est assez spécial le type "Type" en vb.net...

     

    @+ et bonne vacances!

     

    Thierry

     

     

     

     

    jeudi 5 avril 2007 12:49