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 :

passer un tabelau rempli a une fonction c#


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut passer un tabelau rempli a une fonction c#
    Bonjour, je galere avec un petit probleme

    J'ai declaré un tableau tab a deux dimensions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[,] tabStation = new string[ddlAdr.Items.Count,2];
    Je le rempli via un data reader :
    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
    connection.Open();
                System.Data.SqlClient.SqlDataReader oDBDataReader2;
                String Query2 = "SELECT * FROM [StationsServices]";//  where ID_Station =" + ddlAdr.Items[d].Value
                SqlCommand cmdDatabase2 = new SqlCommand(Query2, connection);
                oDBDataReader2 = cmdDatabase2.ExecuteReader();
                int a = 0;
                while (oDBDataReader2.Read() == true)
                {
                    for (int i = a; i < ddlAdr.Items.Count; i++)
                    {
                        tabStation[i, 0] = oDBDataReader2["Adresse"].ToString();
                        tabStation[i, 1] = oDBDataReader2["Name_station"].ToString();
                        a = a+1;
                        break;
                    }
     
                }
                connection.Close();
    Je vérifie a l'aide d'un F9, je constate que mon tableau se rempli avec les 4 lignes que j'ai dans ma bd

    je veux faire un traitement sur ce tableau et je veux le passer a une fonction, mais il me dis que je dépasse mes bornes

    fonction(tabStation[ddlAdr.Items.Count, 1] ) qui st equivalent a tabstation[4,2]

    ma question est : est ce que le fait d'appeler la fonction avec tabstation[4,2] veux dire que je cherche l'element 4,2 ou je parle d'un tableau deja rempli qui a 4 lines et deux colonnes ???

  2. #2
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Le code gėnėrė me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <input type="submit" name="BtnStations" value="All Stations" onclick="javascript:findAllAddress('System.String[,]','4'); return false;" id="BtnStations" class="button" />

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction(tabStation[ddlAdr.Items.Count, 1] )
    Tu indiques effectivement que tu veux récupérer l'élément à la "ligne" d'indice ddlAdr.Items.Count et la "colonne" d'indice 1.
    Or en C#/.Net par défaut les tableaux sont indexés à partir de 0, donc l'indice de la dernière "ligne" est ddlAdr.Items.Count - 1.

    Si tu veux juste transmettre le tableau il suffit de faire :
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #4
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci pour votre réponse, quand je fais comme tu dis la ligne transmet en html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <input type="submit" name="BtnStations" value="All Stations" onclick="javascript:findAllAddress('System.String[,]','4'); return false;" id="BtnStations" class="button" />
    et la fonction JavaScript le prend comme une chaîne de caractères

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Là c'est un autre souci : tu génères du code JavaScript qui n'a rien à voir avec le code C#.
    Il va falloir produire une représentation JavaScript de celui-ci.
    Par exemple :
    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
    StringBuilder builder = new StringBuilder();
    builder.Append("[");
    for (int i = 0; i < m; ++i)
    {
        builder.Append("[");
        for (int j = 0; j < n; ++j)
        {
            builder.Append(tabStation[i, j]);
            if (j != n - 1)
            {
                builder.Append(",");
            }
        }
        builder.Append("]");
     
        if (i != m - 1)
        {
            builder.Append(",");
        }
    }
    builder.Append("]");
     
    string result = builder.ToString();
    Après il y a mieux que d'inliner la valeur au niveau du handler comme créer une variable dédiée dans le script JavaScript.

    Mais bon ça devrait faire l'affaire.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Je n ai rien compris ce bout de code c est à mettre dans la page c# ???
    Sachant que je construit mon tableau comme ça :
    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
    string[,] tabStation = new string[ddlAdr.Items.Count,2];
     
                connection.Open();
                System.Data.SqlClient.SqlDataReader oDBDataReader2;
                String Query2 = "SELECT * FROM [StationsServices]";//  where ID_Station =" + ddlAdr.Items[d].Value
                SqlCommand cmdDatabase2 = new SqlCommand(Query2, connection);
                oDBDataReader2 = cmdDatabase2.ExecuteReader();
                int a = 0;
                while (oDBDataReader2.Read() == true)
                {
                    for (int i = a; i < ddlAdr.Items.Count; i++)
                    {
                        tabStation[i, 0] = oDBDataReader2["Adresse"].ToString();
                        tabStation[i, 1] = oDBDataReader2["Name_station"].ToString();
                        a = a+1;
                        break;
                    }
     
                }
                connection.Close();
     
                BtnStations.Attributes.Add("onClick", "javascript:findAllAddress('" + tabStation + "','" + ddlAdr.Items.Count + "'); return false;");
    Et ma fonction JavaScript est comme ceci :
    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
    function findAllAddress(tabStation, n) {
     
        var text,text2 = "";
        for (var i = 0; i < n; i++) {
     
            var address = tabStation[i][0];
            var name = tabStation[i][1];
     
            geocoder.geocode({ 'address': address }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) { 
     
                    var addrLocation = results[0].geometry.location;
                    map.setCenter(addrLocation);
     
                    document.getElementById('lat').value = results[0].geometry.location.$a;
                    document.getElementById('lng').value = results[0].geometry.location.ab;
     
                    var addrMarker = new google.maps.Marker({
     
                        position: addrLocation,
                        map: map,
                        title: results[0].formatted_address
                    });
                    markers.push(addrMarker);
                }
            });
            text += tabStation[i][0];
            text2 += tabStation[i][1];
        }
     
        alert(n + '/' + text+'/'+text2);
     
    }

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Oui dans la page C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BtnStations.Attributes.Add("onClick", "javascript:findAllAddress('" + result + "','" + ddlAdr.Items.Count + "'); return false;");
    Un petit détail en passant : tu ne devrais pas avoir à passer la longueur du tableau à ta fonction JavaScript (ce n'est pas du C ), tu peux utiliser la propriété length directement.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  8. #8
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci pour ton suivi, excusez moi pourrais tu m expliquer le bout de code que je dois ajouter au niveau du c# pour construire la variable résultat à passer à la fonction js

    LE CODE html donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="BtnStations" value="All Stations" onclick="javascript:findAllAddress('[[P4266,ville,Station1],[R405,ville,Station2],[P4201,ville,Station3],[N1,ville,Station4]]','4'); return false;" id="BtnStations" class="button" />
    ca donne les donnée de ma bd mais au niveau de la fonction javascript, la fonction interprété mal les paramétrés passés

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Le code de génération est à placer après le connection.Close.

    En tout ça devrait donner quelque chose comme:
    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
    string[,] tabStation = new string[ddlAdr.Items.Count,2];
     
    connection.Open();
    System.Data.SqlClient.SqlDataReader oDBDataReader2;
    String Query2 = "SELECT * FROM [StationsServices]";//  where ID_Station =" + ddlAdr.Items[d].Value
    SqlCommand cmdDatabase2 = new SqlCommand(Query2, connection);
    oDBDataReader2 = cmdDatabase2.ExecuteReader();
    int a = 0;
    while (oDBDataReader2.Read() == true)
    {
    	for (int i = a; i < ddlAdr.Items.Count; i++)
    	{
    		tabStation[i, 0] = oDBDataReader2["Adresse"].ToString();
    		tabStation[i, 1] = oDBDataReader2["Name_station"].ToString();
    		a = a+1;
    		break;
    	}
     
    }
    connection.Close();
     
    StringBuilder builder = new StringBuilder();
    builder.Append("[");
    for (int i = 0; i < m; ++i)
    {
        builder.Append("[");
        for (int j = 0; j < n; ++j)
        {
            builder.Append(tabStation[i, j]);
            if (j != n - 1)
            {
                builder.Append(",");
            }
        }
        builder.Append("]");
     
        if (i != m - 1)
        {
            builder.Append(",");
        }
    }
    builder.Append("]");
     
    string result = builder.ToString();
     
    BtnStations.Attributes.Add("onClick", "javascript:findAllAddress('" + result + "','" + ddlAdr.Items.Count + "'); return false;");
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    effectivement ca passe les bon parametres, mais il y a un probleme au niveau de la fonction javascript :
    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
    function findAllAddress(tabStation) {
     
        var text, text2 = "";
        var n = tabStation.length;
        for (var i = 0; i < n; i++) {
     
            var address = tabStation[i][0];
            var name = tabStation[i][1];
     
            geocoder.geocode({ 'address': address }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) { 
     
                    var addrLocation = results[0].geometry.location;
                    map.setCenter(addrLocation);
     
                    document.getElementById('lat').value = results[0].geometry.location.$a;
                    document.getElementById('lng').value = results[0].geometry.location.ab;
     
                    var addrMarker = new google.maps.Marker({
     
                        position: addrLocation,
                        map: map,
                        title: results[0].formatted_address
                    });
                    markers.push(addrMarker);
                }
            });
            text += tabStation[i][0];
     
        }
     
        alert(n + '/' + text);
     
    }
    Le n est erroné = 97 alors que c'est 4 , et l'alerte m'affiche : undefined[[...],[...] les ... represente mes données avec des virgules

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="BtnStations" value="All Stations" onclick="javascript:findAllAddress('[[P4266,ville,Station1],[R405,ville,Station2],[P4201,ville,Station3],[N1,ville,Station4]]'); return false;" id="BtnStations" class="button" />
    sachant que [P4266,ville,Station1] : P4266,ville est un champ et Station1 c'est un champ

    Je pense qu'il ne faut pas prendre les données envoyés comme parametre depuis c# comme tableau dans javascript

    parce que deja je fais un traitement sur chaque [,,]

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Oui en effet il faut retirer les "'", sinon ça passe une chaîne de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BtnStations.Attributes.Add("onClick", "javascript:findAllAddress(" + result + "); return false;");
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  12. #12
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    quand j'enleve les '', et je met des alert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function findAllAddress(tabStation) {
     
     
        var n = 4;
        for (var i = 0; i < n; i++) {
     
            var address = tabStation[i][0]; alert(address);
            var name = tabStation[i][1]; alert(name);
    ...
    }
    Il m'affiche caractere par caractere avec undefined

  13. #13
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    seriousme, merci pour votre passage qui m'a été vraiment utile

    un membre sur le forum javascript m'a aidé avec ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Non, ce n'est toujours pas le bon format...
     
    Tu as ça :
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    '[[P4266,ville,Station1],[R405,ville,Station2],[P4201,ville,Station3],[N1,ville,Station4]]'
    Il te faut ça :
     
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    [['P4266,ville','Station1'],['R405,ville','Station2'],['P4201,ville','Station3'],['N1,ville','Station4']]
    j'ai rectifié sur ton bout de code et ca marche comme je veux

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/09/2006, 12h25
  2. Réponses: 3
    Dernier message: 28/11/2005, 12h15
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. Passer le résultat (tableau) d'une fonction
    Par coyote90 dans le forum Access
    Réponses: 3
    Dernier message: 10/11/2005, 19h56
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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