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

 

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

Undo δεδομένων βάσης

Îåêßíçóå áðü ôï ìÝëïò mkoukou. Τελευταία δημοσίευση από το μέλος mkoukou στις 05-08-2006, 15:24. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-08-2006, 15:28 15498

    Undo δεδομένων βάσης

    Δουλέυω σε Visual Basic 2005 κι έχω το εξής πρόβλημα:

    Ο κώδικας είναι περίπου έτσι:

    Dim dsData as dataset = {Import Data from database}

    Dim dtData as DataTable = dsData.Tables(TableName)

    Dim dvData as Dataview = New DataView(dtData)

    Dim cmData as CurrencyManager = CType(Me.BindingContext(dvData), CurrencyManager)

    If cmData.Count > 0 Then cmDataRowView = CType(cmData.Current, DataRowView)

    txt_Address.DataBindings.Clear()

    txt_Comments.DataBindings.Clear()

    txt_Address.DataBindings.Add("Text", dvData, "Contacts_Address")

    txt_Comments.DataBindings.Add("Text", dvData, "Contacts_Comments")

     

    Μου φέρνει κανονικά τα δεδομένα στα κουτιά κι όταν πατήσω ένα κουμπί Undo του κάνω

    dsData.RejectChanges()

     txt_Address.DataBindings.Clear()

    txt_Comments.DataBindings.Clear()

    txt_Address.DataBindings.Add("Text", dvData, "Contacts_Address")

    txt_Comments.DataBindings.Add("Text", dvData, "Contacts_Comments")

    Εδώ δουλεύει κανονικά και μου εμφανίζει στα textboxes τα δεδομένα που έχουν έρθει από την βάση.

     

    Όταν όμως κανω εισαγωγή μίας νέας εγγραφής και πατήσω το κουμπί Undo δεν κάνει απολύτως τίποτα.

    Καμιά ιδέα για το πως θα γίνει;

  •  04-08-2006, 15:45 15499 σε απάντηση της 15498

    Απ: Undo δεδομένων βάσης

    Αυτό είναι λίγο περίεργο, καθώς η RejectChanges θα έπρεπε να έχει διαγράψει τις νέες γραμμές, ΕΚΤΟΣ και αν έχει κληθεί εντωμεταξύ η AcceptChanges. Αυτό θα το καταλάβεις ελέγχοντας το RowState property της γραμμής. Αν δεν είναι Added, σημαίνει ότι για κάποιο λόγο έχει κληθεί η AcceptChanges.

    Πως προσθέτεις τη νέα γραμμή? Μήπως καλείς κάπου άμεσα ή έμμεσα την AcceptChanges?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-08-2006, 15:52 15501 σε απάντηση της 15498

    Απ: Undo δεδομένων βάσης

    Εδώ έγκειτε ένα θέμα

    Το cmDataRowView.IsNew είναι True

    Το cmDataRowView.Row.RowState είναι Dettached
  •  04-08-2006, 16:00 15503 σε απάντηση της 15498

    Απ: Undo δεδομένων βάσης

    Την εισαγωγή νέας εγγραφής την καλώ μέσω του

    cmData.AddNew

    και μετά κάνω

    cmDataRowView = CType(cmData.Current, DataRowView)

    Εδώ πάλι το cmDataRowView.Row.RowState είναι Dettached
  •  04-08-2006, 16:12 15505 σε απάντηση της 15499

    Απ: Undo δεδομένων βάσης

    Με τον τρόπο αυτό δεν προσθέτεις εγγραφή στο DataSet, απλά δημιουργείς μία νέα εγγραφή η οποία παραμένει στον αέρα. Αυτό σημαίνει εξάλλου και το dettached, ότι το DataRow δεν ανήκει πουθενά.

    Για να προσθέσεις τη γραμμή στο DataTable έχεις δύο επιλογές. Ή να καλέσεις την AddNew του DataView, ή να καλέσεις τη NewRow του DataTable και να προσθέσεις το καινούριο DataRow στο Rows collection του DataTable. Οι δύο αυτές λύσεις περιγράφονται στο documentation της CurrencyManager.AddNew

    Έχω μία άλλη ερώτηση όμως. Γιατί επεμβαίνεις απευθείας στο CurrencyManager και προσθέτεις view? Δεν είναι απλούστερο να προσθέσεις απευθείας ένα dataset στη φόρμα σου?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-08-2006, 15:24 15518 σε απάντηση της 15498

    Απ: Undo δεδομένων βάσης

    Παναγιώτη ευχαριστώ για τη συνεργασία σου.

    Χρησιμοποιώ το dataview διότι είναι πιο εύχρηστο στο search και στο sort. Με το dataset πρέπει να επεμβαίνω συνέχεια στη βάση για να μου δουλέψουν αυτά τα δύο σωστά.

    Έτσι δούλευα πριν αλλά το dataset.tables(0).select δεν μου φαίρνει πάντα την τιμή που θέλω. Για κάποιο λόγο επιστρέφει nothing. Ενώ με loop στις γραμμές έβρισκα το row που ήθελα το select δεν μου το έφερνε. Και το όλο και βασικότερο πρόβλημα ήταν ότι συμπεριφερόταν διαφορετικά όταν έτρεχα την εφαρμογή από φορά σε φορά χωρίς να αλλάξω κάτι στον κώδικα.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems