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

 

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

Πρόβλημα με DataColumn Expression

Îåêßíçóå áðü ôï ìÝëïò dpant. Τελευταία δημοσίευση από το μέλος Markos στις 22-08-2011, 18:22. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  19-08-2011, 12:58 66842

    Πρόβλημα με DataColumn Expression

    Εχω την εξής απορία:

    Γιατί δεν λειτουργούν τα lookup columns στα typed datasets; Πιο συγκεκριμμένα, μέσω του dataset designer, προσθέτω ένα νεό column στο DataTable και στο Expression property γράφω:

    Parent(FK_SalesTerritory_SalesPerson).Name

    ώστε τo column να επιστρέφει το όνομα του Territory απο τον parent πίνακα μέσω της σχέσης FK_SalesTerritory_SalesPerson την οποία και έχω ορίσει επίσης μέσω στον designer.

    Ο παραπάνω τρόπος για υλοποίηση lookup columns μου φαίνεται ωραίος αν και ξέρω οτι θα μπορούσε να γίνει π.χ. με ενα JOIN στο SELECT command. Όμως δεν δουλεύει. Όταν πάω να γεμίσω ένα GridView (σε μια aspx σελίδα) με τα data (μέσω ObjectDataSource συνδεδεμένο με το DataTableAdapter) εμφανίζεται το εξής μύνημα κατά την εκτέλεση: "Cannot find parent relationship FK_SalesTerritory_SalesPerson".

    Το πρόβλημα αυτό έχει αναφερθεί στα φόρουμ πολλάκις εδω και χρόνια και λύση δεν έχει βρεθεί.

    Τελικά έχει λυθεί αυτό το πρόβλημα ή οχι;

    Ελπίζω να λάβω μια απάντηση αν και ξέρω οτι σε αυτά τα φόρουμ η συχνότητα απαντήσεων είναι .... απειροελάχιστη Sad

    In their capacity as a tool, computers will be but a ripple on the surface of our culture. In their capacity as intellectual challenge, they are without precedent in the cultural history of mankind. -Edsger W. Dijkstra. The humble programmer.
    Δημοσίευση στην κατηγορία: , , , , , ,
  •  19-08-2011, 19:38 66847 σε απάντηση της 66842

    Απ: Πρόβλημα με DataColumn Expression

    Δε νομίζω ότι υπάρχει πρόβλημα. Μήπως δεν κάνεις κάτι σωστά; Ρίξε μια ματιά σ' αυτό το παράδειγμα. Για να τεστάρω κι εγώ αν "παίζει", δημιούργησα ένα ASP.NET application. Έριξα δυο πίνακες στον designer, ο οποίος αναγνώρισε το relationship κανονικά. Στο child table δημιούργησα ένα νέο column, τύπου string, και ως τιμή έδωσα το expression: Parent(FK_Genera_Families).FamilyName. Στη συνέχεια, έριξα ένα gridview στο page και στο code behind έγραψα τον εξής κώδικα στο Page_Load event:

    TaxonomyDataset txDS = new TaxonomyDataset();
    TaxonomyDatasetTableAdapters.FamiliesTableAdapter fTA = new WebDataColumnExpression.TaxonomyDatasetTableAdapters.FamiliesTableAdapter();
    TaxonomyDatasetTableAdapters.GeneraTableAdapter gTA = new WebDataColumnExpression.TaxonomyDatasetTableAdapters.GeneraTableAdapter();
    fTA.Fill(txDS.Families);
    gTA.Fill(txDS.Genera);
    //
    this.GridView1.DataSource = txDS.Genera;
    this.GridView1.DataBind();
    Όλα έπαιξαν μια χαρά...


    dpant:


    Ελπίζω να λάβω μια απάντηση αν και ξέρω οτι σε αυτά τα φόρουμ η συχνότητα απαντήσεων είναι .... απειροελάχιστη Sad


    Μας αδικείς λίγο...

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  20-08-2011, 11:00 66853 σε απάντηση της 66847

    Απ: Πρόβλημα με DataColumn Expression

    Με αυτό τον τρόπο δουλεύει. Με το ObjectDataSource συνδεδεμένο στον tableadapter οχι. Άρα; Μήπως δεν γίνεται το Fill του Parent πίνακα;

    Η απάντηση σου ήταν άμεση και ευχαριστώ πολύ αλλά γενικώς μιλόντας νομίζω είναι η εξαίρεση και οχι ο κανόνας.

    In their capacity as a tool, computers will be but a ripple on the surface of our culture. In their capacity as intellectual challenge, they are without precedent in the cultural history of mankind. -Edsger W. Dijkstra. The humble programmer.
  •  20-08-2011, 11:10 66854 σε απάντηση της 66853

    Απ: Πρόβλημα με DataColumn Expression

    Δεν μπορεί να δουλέψει "έξω" από το dataset. Το datarelation πρέπει να δηλωθεί εκεί. Μόνο με το "ορφανό" datatable δε γίνεται δουλειά...

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  20-08-2011, 13:54 66858 σε απάντηση της 66853

    Απ: Πρόβλημα με DataColumn Expression

    Γιατί το θέλεις το ObjectDataSource αφού δεν δουλεύεις με χύμα αντικείμενα? Το ObjectDataSource χρησιμοποιείται μόνο όταν δεν θέλεις να χρησιμοποιήσεις datatables αλλά απλά αντικείμενα, γι αυτό και δεν καταλαβαίνει καμμία από τις επιπλέον δυνατότητες του DataTable. Για το σκοπό αυτό υπάρχουν οι TableAdapters


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  20-08-2011, 15:42 66860 σε απάντηση της 66858

    Απ: Πρόβλημα με DataColumn Expression

    Παναγιώτη, και με το ObjectDataSource μπορεί να δουλέψει μια χαρά. Θέλει στο gridview να κάνει edit, update και delete. Το θέμα είναι ότι το DataRelation δεν παίζει έξω από το DataSet.

    @dpant: Μια πρόχειρη λύση είναι να πας στο code του TableAdapter και να προσθέσεις μια μέθοδο όπως η παρακάτω:

    namespace WebDataColumnExpression.TaxonomyDatasetTableAdapters
    {
        public partial class GeneraTableAdapter
        {
            public virtual TaxonomyDataset.GeneraDataTable GetDataWithLookup()
            {
                TaxonomyDataset txDS = new TaxonomyDataset();
                TaxonomyDatasetTableAdapters.FamiliesTableAdapter fTA = new WebDataColumnExpression.TaxonomyDatasetTableAdapters.FamiliesTableAdapter();
                fTA.Fill(txDS.Families);
                this.Fill(txDS.Genera);
                return txDS.Genera;
            }
        }
    }

    Μόνο μην το κάνεις στον κώδικα που παράγει ο designer.

    Στη συνέχεια, πήγαινε στο ObjectDataSource και στο SelectMethod property, αντί της GetData δώσε GetDataWithLookup. Θα δουλέψει πάνω - κάτω όπως φαντάζεσαι. Φρόντισε τα πεδία που είναι read only να δηλωδούν έτσι και στο gridview. Πειραματίσου κι όλας και γράψε πέντε λόγια για τι μπορεί να γίνει και τι όχι.



    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  22-08-2011, 17:02 66879 σε απάντηση της 66860

    Απ: Πρόβλημα με DataColumn Expression

    Χμ, και ο 2ος τρόπος που προτείνεις ακούγεται ωραίος. Θα τον δοκιμάσω και θα σου πω αν δούλεψε σωστά ή οχι. Για να είμαι ειλικρινής κάπως έτσι το είχα σκεφτεί αλλά μπερδευόμουν με τον κώδικα του designer.

    Όσο για τη λειτουργία του datarelation, εντάξει, κατάλαβα γιατί δεν γίνεται χωρίς τις λύσεις που προτείνεις.

    Ευχαριστώ πολύ, οι απαντήσεις σου ήταν άψογες.


    In their capacity as a tool, computers will be but a ripple on the surface of our culture. In their capacity as intellectual challenge, they are without precedent in the cultural history of mankind. -Edsger W. Dijkstra. The humble programmer.
  •  22-08-2011, 18:14 66880 σε απάντηση της 66879

    Απ: Πρόβλημα με DataColumn Expression

    Λοιπόν, και η 2η λύση λειτουργεί κανονικά. Μάλιστα, νομίζω είναι καλύτερη.

    Για τους ανυποψίαστους όμως είναι λίγο tricky γιατί με το View Code πάνω στον TableAdapter αυτό που εμφανίζεται αρχικά είναι:

    namespace WebApplication1 {

    public partial class Products { }

    }

     

    Αντ' αυτού, για να δουλέψει σωστά, πρέπει να μπει το σωστό namespace, να δηλωθεί το partial class του TableAdapter και εκεί να μπει η GetDataWithLookup (όπως το έχεις γράψει εσυ στο post σου).

    Επίσης, ο Wizard του ObjectDataSource δεν κατάφερε να δει παρά μόνο την GetData. Προς το παρόν η δουλειά έγινε μέσω του SelectMethod property, όπως ακριβώς έγραψες.

     

     


    In their capacity as a tool, computers will be but a ripple on the surface of our culture. In their capacity as intellectual challenge, they are without precedent in the cultural history of mankind. -Edsger W. Dijkstra. The humble programmer.
  •  22-08-2011, 18:22 66881 σε απάντηση της 66880

    Απ: Πρόβλημα με DataColumn Expression

    Η αλήθεια είναι ότι πολύς κόσμος φοβάται ν' αγγίξει το partial class. Με λίγη σκέψη μπορείς να κάνεις μικρά θαύματα!! Πιστεύω ότι είναι πολλοί εκείνοι που δεν ασχολούνται καν να διαβάσουν τον κώδικα που "γράφει" ο designer. Ο wizard του ObjectDataSource θα "δει" τη νέα μέθοδο... αφού τη δηλώσεις!! (κάπου εδώ τραβάς τα μαλλιά σου...)

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems