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

 

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

Αποθήκευση στοιχείων σε db πλην του τελευταίου

Îåêßíçóå áðü ôï ìÝëïò tarasiadis. Τελευταία δημοσίευση από το μέλος tarasiadis στις 05-06-2009, 11:26. Υπάρχουν 15 απαντήσεις.
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-06-2009, 15:46 51337

    Αποθήκευση στοιχείων σε db πλην του τελευταίου

    Καλησπέρα σε όλους,
    δεν ξέρω πως να περιγράψω το πρόβλημά μου με ένα απλό τίτλο.

    Πιο συγκεκριμένα, όταν συμπληρώνω κάποια πεδία (textboxs) στο wpf μου και κάνω αποθήκευση στην βάση μου (SQL 2005), αποθηκεύονται όλα τα στοιχεία πλην του τελευταίου που συμπλήρωσα. Σε περίπτωση που μετά από την συμπλήρωση του τελευταίου κάνω κλικ κάπου αλλού (φύγω δηλαδή από το πεδίο) και μετά κάνω αποθήκευση, όλα γίνονται σωστά.

    Τι κάνω λάθος;
    Υπάρχει τρόπος με κώδικα C# να κανω κλικ στο text box μου και μετά ένα κλικ κάπου αλλού για να προσομοιώσω την σωστή αποθήκευση; Αυτό αν δεν υπάρχει άλλος τρόπος.

    Ευχαριστώ.
  •  04-06-2009, 16:48 51339 σε απάντηση της 51337

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου


    για να δούμε τι κάνεις λάθος, στείλε μας λίγο κώδικα....

    επίσης το τελευταίο που λες,"Υπάρχει τρόπος με κώδικα C# να κανω κλικ στο text box μου και μετά ένα κλικ κάπου αλλού για να προσομοιώσω την σωστή αποθήκευση;",είναι λάθος λογική...

    θα το κάνεις με το σωστό τρόπο και δεν μπορείς να έχεις τον χρήστη σου να πατάει "κάπου έξω" για να σώζει...

    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  04-06-2009, 18:47 51340 σε απάντηση της 51339

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Σωστά... χωρίς κώδικα δεν θα δώσω καλή περιγραφή του προβλήματος...

    Έχω λοιπόν διάφορα textboxs όπως το παρακάτω, τα οποία συνδέω με την βάση μου με data binding.

    <TextBox Height="23" HorizontalAlignment="Left" Margin="2" Name="txtPosoXorisFpa" VerticalAlignment="Top" Width="200" Text="{Binding Path=poso_xoris_fpa}"/>

    Από εκεί και πέρα, έχω ένα κουμπί για save το οποίο με click καλεί την μέθοδο:

    private void btnSave_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    ExodaFormDB.SubmitChanges();
    
                    MessageBox.Show("Οι αλλαγές σας αποθηκεύτηκαν.");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    όπου έχω ορίσει πιο πριν για το datacontext

    private project_managementDataContext ExodaFormDB = new project_managementDataContext();
    private CollectionViewSource ExodaFormViewSource;
    private BindingListCollectionView ExodaFormView;
    και μία μέθοδο στο onloaded

    private void ExodaForm_Loaded(object sender, RoutedEventArgs e)
            {
                this.ExodaFormViewSource = (CollectionViewSource)this.FindResource("ExodaFormView");
                ExodaFormViewSource.Source = ExodaFormDB.Exodas;
    
                this.ExodaFormView = (BindingListCollectionView)this.ExodaFormViewSource.View;
            }
    Νομίζω ότι είμαι σωστός κατα το binding και το datacontext Γιατί λειτουργούν σωστά.

    Τώρα ίσως πριν το
    ExodaFormDB.SubmitChanges();

    να πρέπει να κάνω και κάτι άλλο.

  •  04-06-2009, 19:26 51342 σε απάντηση της 51340

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Μια γρήγορη απάντηση που δεν είναι η λύση, αλλά σε πάει προς την σωστή κατεύθυνση, είναι η σκέψη ότι

    το last textbox σου έχει το focus...... αν χάσει το focus τότε θα σώζεται σωστά....

     

    κοίτα λίγο αυτό το Post

    http://stackoverflow.com/questions/222839/wpf-changes-to-textbox-with-focus-arent-committed-until-after-the-closing-event


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  04-06-2009, 19:29 51343 σε απάντηση της 51340

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    WPF και binding χμ... Δεν έχω ασχοληθεί καθόλου, αλλά από τα λίγα που καταλαβαίνω πρέπει μάλλον να καλέσεις την BindingListCollectionView.CommitEdit() method. Ρίξε μια ματιά και σ' αυτό το άρθρο. Αν υπάρχει κάτι ακόμα και το βρεις, κάνε ένα post και για μας...
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  04-06-2009, 20:31 51347 σε απάντηση της 51343

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    O εύκολος τρόπος είναι να αλλάξεις στο binding expression το πότε θα σπρώχνει τις τιμές από το control στο object. Αυτό γίνεται με το UpdateSourceTrigger attribute:

    <TextBox ... Text="{Binding Path=poso_xoris_fpa, UpdateSourceTrigger=PropertyChanged}"/>

    Το default είναι το LostFocus απότε αντιλαμβάνεσαι τώρα γιατί σου συμβαίνει αυτό που περιγράφεις. Το PropertyChanged βέβαια θα τρέχει αυτομάτως και τα validation rules πράγμα που μπορεί να σημαίνει overhead. Αν συμβαίνει κάτι τέτοιο η εναλλακτική λύση (ο πιο δύσκολος τρόπος) είναι πριν το submit, να κάνεις έναν έλεγχο στο visual tree και να βρεις όλα τα binding expressions και να καλέσεις την UpdateSource μέθοδο που έχει το καθένα.


    Vir prudens non contra ventum mingit
  •  04-06-2009, 20:45 51348 σε απάντηση της 51347

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    KelMan:

    O εύκολος τρόπος είναι να αλλάξεις στο binding expression το πότε θα σπρώχνει τις τιμές από το control στο object. Αυτό γίνεται με το UpdateSourceTrigger attribute:

    <TextBox ... Text="{Binding Path=poso_xoris_fpa, UpdateSourceTrigger=PropertyChanged}"/>

    Απορία:

    Μ' αυτόν τον τρόπο, υπάρχει περίπτωση να μην συγχρονίζονται τα περιεχόμενα του Context με εκείνα του BindingListCollectionView;


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  04-06-2009, 23:52 51358 σε απάντηση της 51348

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Όχι, γιατί να συμβεί κάτι τέτοιο; Ίσα-ίσα που ο συγχρονισμός θα συμβαίνει πιο άμεσα.


    Vir prudens non contra ventum mingit
  •  05-06-2009, 00:56 51360 σε απάντηση της 51358

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    OK. Απλά θεώρησα ότι ίσως χρειάζεται να κληθεί και η αντίστοιχη μέθοδος του EndEdit() (αναφέρομαι στο BindingSource για WinForms).
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  05-06-2009, 08:53 51365 σε απάντηση της 51360

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Όχι δεν χρειάζεται γιατί τo EndEdit έχει διαφορετικό σκοπό. Καταρχήν προκειμένου να συμβεί πραγματικά κάτι, θα πρέπει το object που χρησιμοποιείται για data binding να υλοποιεί το IEditableObject, πράγμα που δεν κάνουν τα Linq to SQL entities out-of-the-box. Όταν ένα object υλοποιεί το IEditableObject τότε κατά το BeginEdit κάνει copy τις τρέχουσες τιμές των properties του object για να υπάρχουν, κατά το CancelEdit επαναφέρει τις παλιές και κατά το EndEdit σηματοδοτεί ότι έχει τελειώσει η διαδικασία, μπορούν να γίνουν discard τα temp data, μπορούν να τρέξουν τα validations, κλπ.


    Vir prudens non contra ventum mingit
  •  05-06-2009, 09:57 51368 σε απάντηση της 51365

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Ναι, το γνωρίζω. Το έχουμε συζητήσει και στο παρελθόν. Νόμιζα ότι στα WPF η Microsoft  έχει υλοποιήσει κάτι διαφορετικό στον τομέα του binding, αλλά απ' ό,τι φαίνεται κι εδώ το BindingListCollectionView "εξυπηρετεί" τα datasets.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  05-06-2009, 10:36 51369 σε απάντηση της 51347

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    KelMan:

    O εύκολος τρόπος είναι να αλλάξεις στο binding expression το πότε θα σπρώχνει τις τιμές από το control στο object. Αυτό γίνεται με το UpdateSourceTrigger attribute:

    <TextBox ... Text="{Binding Path=poso_xoris_fpa, UpdateSourceTrigger=PropertyChanged}"/>

    Το default είναι το LostFocus απότε αντιλαμβάνεσαι τώρα γιατί σου συμβαίνει αυτό που περιγράφεις. Το PropertyChanged βέβαια θα τρέχει αυτομάτως και τα validation rules πράγμα που μπορεί να σημαίνει overhead. Αν συμβαίνει κάτι τέτοιο η εναλλακτική λύση (ο πιο δύσκολος τρόπος) είναι πριν το submit, να κάνεις έναν έλεγχο στο visual tree και να βρεις όλα τα binding expressions και να καλέσεις την UpdateSource μέθοδο που έχει το καθένα.


    Καλημέρα,
    δουλεύει άψογα.

    Εκτός από textboxes μπορεί να χρησιμοποιηθεί και σε άλλα controls? πχ checkboxes, dropdown κλπ?

    Τώρα αυτό για το overhead δεν μπορώ να πω ότι το πολυκατάλαβα. ΟΚ υπάρχει μεγαλύτερη επεξεργασία αφού "σπρώχνει" πιο άμεσα για το κάθε ένα control τα data αλλά πως θα καταλάβω αν δημιουργεί πρόβλημα στην εφαρμογή μου?

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

    Ευχαριστώ για τις απαντήσεις.
  •  05-06-2009, 10:50 51371 σε απάντηση της 51368

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Χμμμ... Δεν κατάλαβα...

    Το BindingListCollectionView εξυπηρετεί οποιοδήποτε collection υλοποιεί το IBindingList άρα "εξυπηρετεί" και τα datasets. Τι διαφορετικό θα μπορούσε να είχε υλοποιήσει; Απλά είναι αυτό που λέμε ότι τα DataSets είναι fat objects, περιέχουν data αλλά υλοποιούν και ένα σωρό interfaces για να είναι εύκολο το databinding. Τώρα, αν τα entities του L2S ή του EF δεν υλοποιούν αυτά τα interfaces είναι άλλη ιστορία. Καλό και κακό ανάλογα από ποιά οπτική γωνία βλέπεις το πράγμα, πάντως δεν είναι θέμα του binding μηχανισμού.


    Vir prudens non contra ventum mingit
  •  05-06-2009, 10:58 51372 σε απάντηση της 51369

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Χαίρομαι που βρήκες λύση στο προβλημά σου με την βοήθεια του Μάνου.

    τώρα για το Overhead...

    αυτό που σου λέει ο μάνος είναι ότι

    επειδή το UpdateSourceTrigger attribute έχει την τιμή PropertyChanged, σε κάθε "εισαγωγή χαρακτήρων " από το keyboard μέσα στο textbox, τρέχει τα validation rules για κάθε χτύπημα από το πληκτρολόγιο , οπότε δημιουργείται Overhead...

     

    σε αυτό εδώ το msdn άρθρο, εξηγεί αναλυτικά όλο το Binding process.

    αν το διαβάσεις και το καταλάβεις θα σου λυθούνε όλες οι απορίες.....

    http://msdn.microsoft.com/en-us/library/ms752347(VS.100).aspx

    δώσε βάση σε ένα σχήμα που έχει και στο παρακάτω

     

    "If the UpdateSourceTrigger value is PropertyChanged, then the value pointed to by the right arrow of TwoWay or the OneWayToSource bindings gets updated as soon as the target property changes. However, if the UpdateSourceTrigger value is LostFocus, then that value only gets updated with the new value when the target property loses focus."


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  05-06-2009, 11:02 51373 σε απάντηση της 51372

    Απ: Αποθύκευση στοιχείων σε db πλην του τελευταίου

    Thanks nikolaosk.

    Πολύ καλό άρθρο φαίνεται. Για να δούμε....
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems