none
Binding sur integer et gestion des valeurs nulls RRS feed

  • Question

  • Bonjour,

    J'essaie de binder un int32 en provenance d'un dataset vers une propriete d'un user control de type int32.

    Tout fonctionne jusqu'à ce qu'un valeur null se presente en base de données, et survient une erreur du type:

    Impossible d'effectuer un cast d'un objet de DBNull en d'autres types..

    J'ai bien cherché du coté de la propriete NullValue du binding, mais la doc indique que cette propriete est inactive avec les string et les entiers.

    Merci pour votre aide

    • Modifié Fred83 samedi 13 novembre 2010 18:39 Faute de frappe
    samedi 13 novembre 2010 18:05

Réponses

  • Bonjour,

    Le plus simple est de définir la propriété de votre UserControl à nullable :

      Public Property MaPropriété As Nullable(Of Integer)
        Get
          Return 'Ma valeur
        End Get
        Set(ByVal value As Nullable(Of Integer))
          If value Is Nothing Then
            ' Alors la propriété la valeur est à Nothing (DBNull.Value)
          Else
            ' Prendre la valeur
            Dim maValeur As Integer
            maValeur = value.Value
          End If
        End Set
      End Property
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Fred83 samedi 13 novembre 2010 20:24
    samedi 13 novembre 2010 18:52
    Modérateur

Toutes les réponses

  • Bonjour,

    Le plus simple est de définir la propriété de votre UserControl à nullable :

      Public Property MaPropriété As Nullable(Of Integer)
        Get
          Return 'Ma valeur
        End Get
        Set(ByVal value As Nullable(Of Integer))
          If value Is Nothing Then
            ' Alors la propriété la valeur est à Nothing (DBNull.Value)
          Else
            ' Prendre la valeur
            Dim maValeur As Integer
            maValeur = value.Value
          End If
        End Set
      End Property
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Fred83 samedi 13 novembre 2010 20:24
    samedi 13 novembre 2010 18:52
    Modérateur
  • Merci,

    Malheureusement j'ai toujours un pb de cast, j'obtiens l'exception suivante:

    Cast non valide de 'System.Int32' en 'System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.

    samedi 13 novembre 2010 19:11
  • Bonjour,

    Pouvez-vous nous montrer la ligne de code qui pose problème ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 13 novembre 2010 20:25
    Modérateur
  •  Public Property AgenceIdOnCommand As Nullable(Of Integer)
        Get
          If Me.CmbAgenceOnCommande.SelectedIndex <> -1 Then
            Return Me.CmbAgenceOnCommande.SelectedValue
          Else
            Return Nothing
          End If
    
        End Get
        Set(ByVal value As Nullable(Of Integer))
          If value.HasValue Then
            Me.CmbAgenceOnCommande.SelectedValue = value.Value
          Else
            Me.CmbAgenceOnCommande.SelectedIndex = -1
          End If
        End Set
      End Property
    
    samedi 13 novembre 2010 20:51
  • Bonjour,

    Quelle ligne pose problème plus précisement ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 13 novembre 2010 20:53
    Modérateur
  • Bonsoir,

    J'ai un peu de mal a identifier la ligne qui leve l'exception;

    La propriete qui me pose probleme (ci-dessus) est lié par databinding a un champ de ma datatable.

    l'exception est levée apres l'ajout d'un datarow contenant dbnull à ma datatable et au moment ou le formulaire s'affiche (myform.show), apparament au moment du binding.

    Merci pour votre aide

    samedi 13 novembre 2010 21:34
  • Bonjour,

    Dans le menu "Déboguer", allez dans "Exceptions...".

    Ensuite cochez la case à l'intersection de "Common Language Runtime Exceptions" et "Levé". Déboguez votre application, automatiquement Visual Studio devrait s'arrêter sur la ligne qui pose problème...

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 13 novembre 2010 22:48
    Modérateur
  • Bonsoir,

    Je vous remercie pour votre aide mais je n'arrive plus a reproduire l'exception, il semble que mon projet soit planté a cause de reference a des propriétés que j'ai supprimé sur un usercontrol.

    J'ai donc créais un nouveau projet puis copier coller le code de mon ancien projet et tout fonctionne.

    Désolé mais encore merci pour votre aide 

    lundi 22 novembre 2010 21:23