Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Διαχειριση array

Îåêßíçóå áðü ôï ìÝëïò yannis. Τελευταία δημοσίευση από το μέλος yannis στις 06-06-2009, 10:45. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-06-2009, 19:33 51344

    Διαχειριση array

    Παιδιά καλησπέρα , σε μία εφαρμογή μου τρέχω μία λούπα σε ενα datatable και διαβαζω το καθενα datarow. ενα πεδιο του row ειναι ο κωδικος πελατη και ενα αλλο το υπολοιπο του για συγκεκριμενο τιμολογιο.
    θελω λοιπον να βαλω σε μεταβλητεσ το συνολικο υπολοιπο ανα πελατη
    δξημιουργησα μια μεταβλητη synolikoYpoloipo() as decimal και του αναθετω τιμη ως εξης
    synolikoYpoloipo(ιδ_πελατη)+=υπολοιπο  (αυτο μπαινει μεσα στην λουπα)

    στο τελος της λουπας θελω να τρεχω μια νεα λουπα που για καθε synolikoYpoloipo(καθε πελατη που βρηκε στην πιο πανω λουπα) να κανει μια εγγραφη σε εναν αλλο πινακα

    Πως μπορω να δημιουργησω την νεα λουπα
    for each τι? 
    και πως θα ξερω ποιες τιμες εχει παρει το δ_πελατη?

    ευχαριστω εκ των προτερων


    Yannis
  •  05-06-2009, 14:29 51383 σε απάντηση της 51344

    Απ: Διαχειριση array

    Καλησπέρα και σε σένα...

    Υποθέτω από αυτά που γράφεις ότι ο ίδιος κωδικός πελάτη μπορεί να βρίσκεται σε περισσότερα από ένα dataRows. Γι' αυτό κάνεις και τη λούπα που γεμίζει το array. Εγώ σε θα έγραφα foreach(decimal total in synolikoYpoloipo) {...}.

    Ελπίζω να σε βοήθησα...
  •  05-06-2009, 14:48 51386 σε απάντηση της 51383

    Απ: Διαχειριση array

    οντως ο ιδιος κωδικος πελατη υπαρχει σε πολλα rows

    δεν καταλαβα ομως την λουπα που μου προτεινεις.

    πως θα παρω το τελικο συνολο + το id_pelath για να μπορεσω να το εισαγω μεσα σε αλλο πινακα

    αν ειναι ευκολο γραψε το μου λιγο πιο αναλυτικα

    ευχαριστω


    Yannis
  •  05-06-2009, 15:06 51387 σε απάντηση της 51386

    Απ: Διαχειριση array

    Ναι, καταλαβαίνω την έλλειψη στην απάντησή μου..   Embarrassed
    Λοιπόν, ένας πολύ απλός τρόπος. Αν ξέρεις πόσοι είναι οι πελάτες ορίζεις 2 Arrays :
    decimal synola[#πελατών]
    int IDs[#πελατών]
    Αν δε ξέρεις πόσοι είναι μπορείς να χρησιμοποιήσεις ArrayList (δε θα σου πω πώς εδώ, μπορείς να το βρεις αν δε ξέρεις ήδη)
    Στο πρώτο loop που διαβάζεις τα dataRows μπορείς να κάνεις κάτι σαν αυτό
    foreach (dataRow row in dataTable)
    {
        int id = //βρες το id από το dataRow
        decimal ypoloipo = //βρες το υπόλοιπο από το dataRow

        for(int i = 0; i < IDs.Count; i++) //ισως να χρειαστεί να έχεις κάνει populate τον IDs
        {                                                //με το πρώτο id για να μπει την πρώτη φορά στη λούπα

            if(id == IDs[ i ]) synola[ i ] += ypoloipo;
        }
    }

    μετά από αυτό θα έχεις 2 Arrays με ίδιο Count, όπου θα ισχύει ID[ i ] -> synola[ i ]

    Βγάζω νόημα????   Stick out tongue
  •  05-06-2009, 15:17 51388 σε απάντηση της 51387

    Απ: Διαχειριση array

    Υπαρχουν 2 προβληματα

    πρωτον δεν ξερω ουτε ποσοι ειναι οι πελατες και προφανως ουτε ποιοι και δευτερον δεν καταλβαινω C# !!!Smile

    οπως και να εχει αν μπορεσεις να μου δωσεις την λυση εστω και σε C# , θα σου ειμαι υποχρεως και θα δω πως θα βγαλω ακρη

    εχει νοημα να χρησιμοποιησω genericlists ή οχι ειναι ασχετο?

     

     


    Yannis
  •  05-06-2009, 16:25 51390 σε απάντηση της 51388

    Απ: Διαχειριση array

    Αυτό σου έγραψα πριν, αν δε ξέρεις πόσοι είναι οι πελάτες εκ των προτέρων, μπορείς να χρησιμοποιήσεις Collections (στη C#) ή ότι δυναμικά arrays έχεις στη δική σου γλώσσα. Σου ξαναγράφω τον κώδικα και λιγο διορθωμένο (γιατί μου φαίνεται σήμερα ότι θέλω γράφω  Stick out tongue )

    //κάπου πιο πάνω...
    ArrayList IDs = new ArrayList();       //Δυναμικές λίστες όπου δεν ορίζω το αρχικό μέγεθος
    ArrayList synola = new ArrayList();   //αλλά προσθέτω και αφαιρώ στοιχεία κατά βούληση
    
    
    foreach (dataRow row in dataTable)
    {
        int id = //βρες το id από το dataRow
        decimal ypoloipo = //βρες το υπόλοιπο από το dataRow
        
        bool foundID = false;
        for(int i = 0; i < IDs.Count; i++) 
        {
            if(id == IDs[ i ]) 
            {
                synola[ i ] += ypoloipo;
                foundID = true;
                break;
            }        
        }
        if (foundID == false)
        {
             IDs.Add(id); //στη C# κάνω .Add(object) για να βάλω κάτι στη δυναμική λίστα μου
             synola.Add(ypoloipo);
        }
    }


    Δηλαδή για κάθε ζεύγος id-ypoloipo που θα βγάζεις από κάθε dataRow, θα περνάς όλη τη λίστα με τα IDs που έχεις, και αν υπάρχει το id μέσα στη λίστα θα κάνει += το υπόλοιπο στο αντίστοιχο στοιχείο της λιστας synola, αλλιώς θα κάνει εισαγωγή του καινούριου id στη λίστα με τα IDs και του αντίστοιχου υπολοίπου στη λίστα με τα υπόλοιπα. Το να το μεταφράσεις στη δική σου γλώσσα δε θα είναι τίποτα μην ανησυχείς. Το θέμα είναι να καταλάβεις τη λογική..

    Wink

    ΥΓ. μπορείς να πας και ένα βήμα παραπέρα και να χρησιμοποιήσεις structs αντί για 2 λίστες...αν ενδιαφέρεσαι ψάξε το και έτσι..
  •  06-06-2009, 09:46 51400 σε απάντηση της 51390

    Απ: Διαχειριση array

    να εισαι καλα !
    Yannis
  •  06-06-2009, 10:45 51401 σε απάντηση της 51400

    Απ: Διαχειριση array

    Βρήκα ώς λύση και νομίζω ότι είναι πιό κατάλληλη για αυτο που θελω να κανω το Dictionary. Απλα το αναφερω για την κοινοτητα. Αν πιστευετε οντως οτι ειναι καλυτερη για το συγκεκριμενο προβλημα

    Πάντως σε και παλι σε ευχαριστω γιατι απο την αναζητηση και τις κατευθυνσεις σου  εμαθα και κατι καινουργιο

    Yannis
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems