IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Mauvais cast (datarowview au lieu de int)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut Mauvais cast (datarowview au lieu de int)
    Salut !

    J'ai un petit souci avec un cast.
    En fait, dans ma fonction "button1_Click", je veux caster la SelectedValue d'une ListBox en int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ville_Id = (int)listBox1.SelectedValue;
    Et j'ai bien défini aupravant que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listBox1.ValueMember = "Ville_Id";
    Bref, je vois pas pourquoi ça cloche...



    Voici le code complet de ma Winform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    namespace Habitat
    {
        public partial class Habite : Form
        {
            private Personne parent;
     
            public Habite(Personne pers)
            {
                InitializeComponent();
                this.parent = pers;
            }
     
            private void button5_Click(object sender, EventArgs e)
            {
                this.Close();
            }
     
            private void listHabitant()
            {
                ...
            }
     
            private void remplitListBox1()
            {
                SqlConnection objConnection;
                SqlCommand objCommand = new SqlCommand();
                DataSet objDataset = new DataSet();
                SqlParameter objParam;
                SqlDataAdapter objAdapter = new SqlDataAdapter();
                string sConnection;
                int Pers_Id = (int)parent.listBox1.SelectedValue;
                objConnection = new SqlConnection();
                sConnection = "Data Source=PC-MIKE\\SQLEXPRESS; Database=Habitat;UID=Mike_Ephec;PWD=*****";
                objConnection.ConnectionString = sConnection;
                objCommand.Connection = objConnection;
                objCommand.CommandType = CommandType.StoredProcedure;
                objCommand.CommandText = "SP_APPL.ListAllVilleParPersonne";
                objParam = new SqlParameter("@Pers_Id", Pers_Id);
                objCommand.Parameters.Add(objParam);
                try
                {
                    objConnection.Open();
                    objAdapter.SelectCommand = objCommand;
                    objAdapter.Fill(objDataset, "ListAllVilleParPersonne");
                    listBox1.DisplayMember = "Libelle";
                    listBox1.ValueMember = "Ville_Id";
                    listBox1.DataSource = objDataset.Tables[0].DefaultView;
                    objConnection.Close();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.ErrorCode.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    throw ex;
                }
            }
     
            private void remplitListBox2()
            {
                ...
            }
     
            private void Habite_Load(object sender, EventArgs e)
            {
                listHabitant();
                remplitListBox1();
                remplitListBox2();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                SqlConnection objConnection;
                SqlCommand objCommand = new SqlCommand();
                SqlParameter objParam;
                string sConnection;
                int Ville_Id;
                int nbreModif;            
                Ville_Id = (int)listBox1.SelectedValue;
                objConnection = new SqlConnection();
                sConnection = "Data Source=PC-MIKE\\SQLEXPRESS; Database=Habitat;UID=Mike_Ephec;PWD=*****";
                objConnection.ConnectionString = sConnection;
                objCommand.Connection = objConnection;
                objCommand.CommandType = CommandType.StoredProcedure;
                objCommand.CommandText = "SP_APPL.N'HabitePas";
                objParam = new SqlParameter("@Ville_Id", Ville_Id);
                objCommand.Parameters.Add(objParam);
                try
                {
                    objConnection.Open();
                    nbreModif = objCommand.ExecuteNonQuery();
                    objConnection.Close();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.ErrorCode.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    throw ex;
                }
                remplitListBox1();
                remplitListBox2();
            }        
        }
    }
    Si vous pouvez m'aider...

  2. #2
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    SelectedValue est un objet

    Utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int.parse(SelectedValue);

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Je ne crois pas que le problème soit là...
    J'ai le même code à un autre endroit du programme et là, ça marche !

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Tu a regardé ce que contenait SelectedValue lors de ton erreur ?

    D'ailleurs il vaut beaucoup mieux faire un TryParse
    Et aussi verifier que SelectedValue n'est pas null ou DbNull.Value AVANT la conversion !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Le Selectvalue contient un System.data.Datarowview.

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bizarre en effet

    Par contre un truc m'interpelle

    Tu reappelle Remplitlistbox1 dans button1_Click
    MAIS tu ne remet jamais ton datasource a null avant de réassigner
    Pour un datagridview par exemple c'est indispensable !!

    2- As tu tracé pour voir a partir de quel appel le selectedvalue est un DataRowView ?

  7. #7
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Citation Envoyé par Mike888 Voir le message
    Le Selectvalue contient un System.data.Datarowview.
    Je ne comprends pas pourquoi ça te retourne DataRowView, apparament tu sélectionne d'un ListBox et pas une ligne d'un controle comme un DataGridView.

    Sinon, la procédure stockée retourne bien des données adéquates (Libelle et Ville_Id) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mauvais cast de Set
    Par LorDjidane dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/11/2006, 17h40
  2. [(cast)] convertir un char en int...
    Par APoLLoN1234 dans le forum C++
    Réponses: 12
    Dernier message: 15/03/2006, 23h15
  3. Réponses: 12
    Dernier message: 31/12/2005, 16h01
  4. comment faire un cast d'un CString en int ?
    Par 180degrés dans le forum MFC
    Réponses: 1
    Dernier message: 23/12/2005, 22h02
  5. Réponses: 5
    Dernier message: 19/07/2004, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo