Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γνωρίζει κανείς πως θα συνδέσω τα πεδία μιας μια κλάσης(τις μεταβλητές μέλη της κλάσης) υλοποιημένης σε C#, με μια Windows Form?

Για παράδειγμα έχω μια φόρμα και θέλω να υπολογίσω μια αριθμητική παράσταση χρησιμοποιώντας κάποιες μεταβλητές. Οι μεταβλητές που τις τιμές τις δίνω χρησιμοποιώντας textboxes στην φόρμα, είναι μέλη μιας κλάσης. Κοιτάζοντας είδα πως αυτό γίνετε με data binding..και πως πρέπει να κάνουμε Add new Source στην καρτέλα Data του Visual Studio. Αλλά δεν βλέπει την Βάση που φτιάχνω.. :cry: :fear:

Δημοσ.

Εγώ μπερδεύτηκα πάντως ... Σε βάση προσπαθείς να κάνεις data-bind ή σε Collection??

 

Θες να γίνεις λίγος πιο συγκεκριμένος/η για το τι προσπαθείς να κάνεις?!

 

Κοίταξε: το DataBinding συνήθως δουλεύει με SQLDataSource, EntityDataSource, ObjectDataSource κλπ.. Αυτό σημαίνει οτι:

 

Αν παίζεις με βάσεις δεδομένων, πως παίζεις?? Με DataSet? Αν ναι, σύνδεσε το Query σου σε ένα sqlDataSource, τα TextBoxes επάνω του και είσαι έτοιμος. Αν παίζεις με Entity Framework, κάνε populate ένα EntityDataSource, σύνδεσε τα πεδία επάνω του και είσαι οκ. Το ίδιο ισχύει και στη περίπτωση του Collection. Πχ, έχεις ένα List από αντικείμενά σου, πχ

>
 List<MyObject> MyCollection = new List<MyObject>();

 

οπου συνδέεις επάνω στο EntityDataSource για να κάνεις bind.

 

Αν γίνεις λίγος πιο συγκεκριμένος θα μπορέσουμε να πουμε και περισσότερα ...

Δημοσ.

Εστω ότι έχω μια φόρμα που περιέχει 2 textboxes και ένα button για να κάνω μια πρόσθεση για παράδειγμα. Μέσα στο solution υπάρχει και ένα .cs αρχείο στο οποίο πρέπει να ορίσω μια κλάση πχ την ADD οποία περιέχει 2 μεταβλητές int μια συνάρτηση που υπολογίζει το αθροισμα τους.

 

Το ερώτημα είναι το εξης. Πως συσχετίζω αυτές τις μεταβλητές της κλάσης με την Windform?

Δημοσ.

Αυτό που ζητάς δεν έχει να κάνει με Databinding, αλλά με απλή διαδικασία ανάθεσης τιμών ... πχ ...

 

έστω TextBox1 & TextBox2 & Button1 σε φόρμα Form1, και η παρακάτω κλάση:

 

>
  public class MyClass
  {
     public MyClass()
     {
     }

     public int AddNumbers( int Num1, int Num2 )
     {
        return (Num1 + Num2);
     }
  }

 

οπότε στη Form1 θα έχεις:

 

>
  private void Button1_Click(object sender, ... klp )
  {
     MyClass myclass = new MyClass();
     MessageBox.Show( myclass.AddNumbers( Int32.Parse(TextBox1.Text), Int32.Parse(TextBox2.Text).ToString(), "Αποτέλεσμα");
  }

 

Αρα δεν έχεις να κάνεις με databinding εδώ .. αλλά με απλή C# ή να στο πω και διαφορετικά, η ίδια φιλοσοφία ισχύει σε όλες τις γλώσσες ...

Δημοσ.

Αυτό που ζητάς δεν έχει να κάνει με Databinding, αλλά με απλή διαδικασία ανάθεσης τιμών ... πχ ...

 

έστω TextBox1 & TextBox2 & Button1 σε φόρμα Form1, και η παρακάτω κλάση:

 

>
  public class MyClass
  {
     public MyClass()
     {
     }

     public int AddNumbers( int Num1, int Num2 )
     {
        return (Num1 + Num2);
     }
  }

 

οπότε στη Form1 θα έχεις:

 

>
  private void Button1_Click(object sender, ... klp )
  {
     MyClass myclass = new MyClass();
     MessageBox.Show( myclass.AddNumbers( Int32.Parse(TextBox1.Text), Int32.Parse(TextBox2.Text).ToString(), "Αποτέλεσμα");
  }

 

Αρα δεν έχεις να κάνεις με databinding εδώ .. αλλά με απλή C# ή να στο πω και διαφορετικά, η ίδια φιλοσοφία ισχύει σε όλες τις γλώσσες ...

 

 

Τον κώδικα της κλάσης που θέλω να δημιουργήσω τον γράφω στο αρχείο Form1.cs που χει δημιουργηθεί δηλαδή μαζί με το solution του project της φόρμας? Η κάνω add ένα ξεχωριστο αρχείο για την κλάση αυτή?

Δημοσ.

Όχι, στο Form1.cs, θα γράψεις το αντίστοιχο κομμάτι

 

>
private void Button1_Click(object sender, ... klp )
  {
     MyClass myclass = new MyClass();
     MessageBox.Show( myclass.AddNumbers( Int32.Parse(TextBox1.Text), Int32.Parse(TextBox2.Text).ToString(), "Αποτέλεσμα");
  }

 

και θα προσθέσεις μια νέα κλάση στο project, που θα την ονομάσεις MyClass (βάσει του κώδικα που σου έδωσα παραπάνω), όπου θα προσθέσεις την εξής μέθοδο μέσα στην κλάση:

 

>
public int AddNumbers( int Num1, int Num2 )
     {
        return (Num1 + Num2);
     }

 

Αν βάλεις το Button στη φόρμα, πάτα διπλό κλίκ ώστε να σου δημιουργήσει τον χειριστή συμβάντος του button... μετά θα χρειαστείς μόνο αυτό:

 

>
    MyClass myclass = new MyClass();
     MessageBox.Show( myclass.AddNumbers( Int32.Parse(TextBox1.Text), Int32.Parse(TextBox2.Text).ToString(), "Αποτέλεσμα");

Δημοσ.

Προσπάθησα και έφτιαξα την κλάση ώς εξής:

 

> class MyClass
   {

       public int numAn;
       public int numBn;

       public MyClass()
       {

       }

       public int  NumAn
       {
           get { return numAn;}
           set { numAn = value; }
       }

       public int  NumBn
       {
           get { return numBn;}
           set {numBn=value;}
       }

       public int AddNumbers( int numAn, int numBn)
       {
           int sum;
           return sum=NumAn+NumBn;
       }

   }

 

και πατώντας διπλό κλίκ πανω στο button:

 

>
       int c;
       private void button1_Click(object sender, EventArgs e)
       {
           MyClass myclass = new MyClass();

           c= myclass.AddNumbers(Convert.ToInt32(textBox1.Text),Convert.ToInt32(textBox2.Text));
           label1.Text = c.ToString();
       }

 

 

Δηλαδή θέλω το αποτέλεσμα να εμφανίζεται στην label που έχω προσθεσει στο πρόγραμμα. Αλλά δεν μου βγάζει σωστά το αποτέλεσμα.. :mad:

Δημοσ.

Πρώτον! Γιατί στην AddNumbers δεν επιστρέφεις το αποτέλεσμα απευθείας?!

 

Κάνεις αυτό:

 

>
     public int AddNumbers( int numAn, int numBn)
       {
           int sum;
           return sum=NumAn+NumBn;
       }

 

ενώ θα έπρεπε να κάνεις αυτό (ΠΡΟΣΕΧΕ ΜΕ ΤΑ ΚΕΦΑΛΑΙΑ ΓΙΑΤΙ ΕΙΝΑΙ ΑΛΛΟ ΤΟ NumAn ΚΑΙ ΑΛΛΟ ΤΟ numAn):

 

>
     public int AddNumbers( int numAn, int numBn)
       {
           return numAn+numBn;
       }

 

πιο εύκολα θα μπορούσες να γράψεις την κλάση σου ως εξής:

 

>
class MyClass
   {

       public int numAn {get; set;}
       public int numBn {get; set;}

       public MyClass()
       {

       }

       public int AddNumbers( int numAn, int numBn)
       {
           return numAn+numBn;
       }
   }

 

Αν και δεν καταλαβαίνω τί χρειάζεσαι τα properties numAn & numBn ... αλλά τεσπα ...

 

Πατώντας το Button1 λες οτι κάνεις αυτό:

 

>
       private void button1_Click(object sender, EventArgs e)
       {
           MyClass myclass = new MyClass();

           c= myclass.AddNumbers(Convert.ToInt32(textBox1.Text),Convert.ToInt32(textBox2.Text));
           label1.Text = c.ToString();
       }

 

γιατί?? Ενώ μπορείς να έχεις αυτό και να μην χρειάζεται να χτυπιέσαι με μεταβλητές εκτός του scope της ρουτίνας:

 

>
private void button1_Click(object sender, EventArgs e)
       {
           MyClass myclass = new MyClass();

           label1.Text = myclass.AddNumbers(Convert.ToInt32(textBox1.Text),Convert.ToInt32(textBox2.Text)).ToString();
       }

Δημοσ.

Γνωρίζει κανείς πως θα συνδέσω τα πεδία μιας μια κλάσης(τις μεταβλητές μέλη της κλάσης) υλοποιημένης σε C#, με μια Windows Form?

Για παράδειγμα έχω μια φόρμα και θέλω να υπολογίσω μια αριθμητική παράσταση χρησιμοποιώντας κάποιες μεταβλητές. Οι μεταβλητές που τις τιμές τις δίνω χρησιμοποιώντας textboxes στην φόρμα, είναι μέλη μιας κλάσης. Κοιτάζοντας είδα πως αυτό γίνετε με data binding..και πως πρέπει να κάνουμε Add new Source στην καρτέλα Data του Visual Studio. Αλλά δεν βλέπει την Βάση που φτιάχνω.. :cry: :fear:

 

Ξεκίνησες να διαβάζεις από εδώ; Και πιο συγκεκριμένα, δες εδώ που λέει step by step πώς γίνεται αυτό που θέλεις.

 

Με την ευκαιρία: κάνεις που κάνεις προγραμματισμό, μην το αντιμετωπίζεις σαν καμιά κομμώτρια*. "Δεν μου βγάζει σωστά το αποτέλεσμα" δεν σημαίνει απολύτως τίποτα. Γίνε πιο συγκεκριμένος.

 

*Αγαπητές κομμώτριες: δεν έχω τίποτα μαζί σας. Η αναφορά αυτή έγινε στα πλαίσια στερεοτυποχαβαλεδοκατάστασης. Αν κάποια στιγμή θέλετε να αστειευτείτε περι geeks, μπορείτε ελεύθερα να χρησιμοποιήσετε το στερεότυπο του προγραμματιστή. Μετά θα σας χακέψουμε.

Δημοσ.

Ξεκίνησες να διαβάζεις από εδώ; Και πιο συγκεκριμένα, δες εδώ που λέει step by step πώς γίνεται αυτό που θέλεις.

 

Με την ευκαιρία: κάνεις που κάνεις προγραμματισμό, μην το αντιμετωπίζεις σαν καμιά κομμώτρια*. "Δεν μου βγάζει σωστά το αποτέλεσμα" δεν σημαίνει απολύτως τίποτα. Γίνε πιο συγκεκριμένος.

 

*Αγαπητές κομμώτριες: δεν έχω τίποτα μαζί σας. Η αναφορά αυτή έγινε στα πλαίσια στερεοτυποχαβαλεδοκατάστασης. Αν κάποια στιγμή θέλετε να αστειευτείτε περι geeks, μπορείτε ελεύθερα να χρησιμοποιήσετε το στερεότυπο του προγραμματιστή. Μετά θα σας χακέψουμε.

 

Γεια σου! Πιο συγκεκριμένος δεν μπορώ να γίνω,αλλά συγκεκριμένη. Σ'ευχαριστώ για τα links και τα σχόλια! Επίσης το ξέρω ότι δεν σημαίνει τίποτα το "Δεν μου βγάζει σωστό αποτέλεσμα" ! Αλλά δεν ήταν δύσκολο να καταλάβει κανείς τι εννοώ με βάση τα προηγούμενα posts! Οσον αφορά το σχόλιο με τις κομμώτριες..δεν χρειαζόταν πιστεύω ^_^

 

Σας ευχαριστώ για τις απαντήσεις σας παιδιά! :rolleyes:

Δημοσ.

Γεια σου! Πιο συγκεκριμένος δεν μπορώ να γίνω,αλλά συγκεκριμένη. Σ'ευχαριστώ για τα links και τα σχόλια! Επίσης το ξέρω ότι δεν σημαίνει τίποτα το "Δεν μου βγάζει σωστό αποτέλεσμα" ! Αλλά δεν ήταν δύσκολο να καταλάβει κανείς τι εννοώ με βάση τα προηγούμενα posts!

 

Με συγχωρείς λοιπόν τώρα που ξέρω ότι είσαι συγκεκριμένη. Για το τι εννοείς, έχε υπόψη ότι μπορεί καλή ώρα να δει το θέμα κάποιος που δε θα διαθέσει πάνω από 1-2 λεπτά χρόνο. Αν μέσα σ' αυτό το χρόνο καταλάβει ποιό είναι το πρόβλημα θα σε βοηθήσει, αν όχι τότε ατυχήσαμε. Στην προκειμένη βιαζόμουν και δεν διάβασα τον κώδικα προσεκτικά. Αν έλεγες "μου βγάζει μηδέν" πιθανώς να είχα βοηθήσει περισσότερο.

 

Οσον αφορά το σχόλιο με τις κομμώτριες..δεν χρειαζόταν πιστεύω ^_^

 

Μας την είπαν με το γάντι... :rolleyes:

Δημοσ.

(ΠΡΟΣΕΧΕ ΜΕ ΤΑ ΚΕΦΑΛΑΙΑ ΓΙΑΤΙ ΕΙΝΑΙ ΑΛΛΟ ΤΟ NumAn ΚΑΙ ΑΛΛΟ ΤΟ numAn)

Ναι μεν είναι άλλα πράγματα αλλά δεδομένου ότι έχει φτιάξει τα Properties NumAn και NumBn μπορεί να τα χρησιμοποιήσει απευθείας μέσα στην κλάση (άσχετα που μέσα στην κλάση συνήθως χρησιμοποιούμε απευθείας τις μεταβλητές). Απλά το αναφέρω ότι δεν είναι λάθος και αυτό.

>
class MyClass
   {

       public int numAn;
       public int numBn;

       public MyClass()
       {

       }

       public int  NumAn
       {
           get { return numAn;}
           set { numAn = value; }
       }

       public int  NumBn
       {
           get { return numBn;}
           set {numBn=value;}
       }

       public int AddNumbers( int numAn, int numBn)
       {
           int sum;
           return sum=NumAn+NumBn;
       }

   }

Δημοσ.

Φίλε Δημήτρη (υποθέτω), φυσικά και είναι έτσι. Αλλά στη προκειμένη περίπτωση και σε αυτό που ήθελε να κάνει η φίλη του post, ήταν εκτός θέματος. Το γεγονός του οτι κράτησα την δήλωση των properties στην κλάση που της προτείνω, είναι γιατί ήθελα να της δώσω την αίσθηση του πως μπορείς να δηλώσεις τα properties. Άλλωστε σε κάποιο response μου, αναφέρω και το οτι δεν καταλαβαίνω τον λόγο ύπαρξής τους, καθώς περνάει παραμέτρους στην μέθοδο υπολογισμού του αθροίσματος.

 

Ίσως σε κάποια πιο πολύπλοκη διαδικασία αυτό που προδιαθέτεις να ήταν καλή πρακτική, παρόλα ταύτα όμως, για την προκειμένη περίπτωση, είναι out of scope. Άλλωστε αν δεις την μέθοδο AddNumbers(), δεν λαμβάνονται υπόψιν οι τιμές των properties αλλά των παραμέτρων της μεθόδου.

Δημοσ.

Συμφωνώ απόλυτα μαζί σου. Δεν έχει νόημα να αθροίζει τις παραμέτρους στις οποίες δεν έχουν ανατεθεί τιμές, τη στιγμή που θέλει να αθροίσει τα ορίσματα της συνάρτησης.

Απλά ήθελα να αναφέρω ότι δεν είναι λάθος σαν σύνταξη, αλλά καθαρά και μόνο σαν λογική.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...