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

 

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

Μορφή ημερομηνία και εισαγωγη στη βάση

Îåêßíçóå áðü ôï ìÝëïò tarasiadis. Τελευταία δημοσίευση από το μέλος tarasiadis στις 11-05-2009, 14:04. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-05-2009, 13:29 50553

    Μορφή ημερομηνία και εισαγωγη στη βάση

    Στην βάση μου έχω ένα πεδία datetime και έχει μορφή dd/mm/yyyy για την ημερομηνία.
    Ωστόσο στο wpf μου η προβολή του πεδίου της βάσης σε ένα textbox πχ γινεται mm/dd/yyyy και αν προσπαθήσω να εισαγω ημερομινία σε μορφή dd/mm/yyyy βγάζει error.

    Ενώ όμως εισαγω τις ηυμερομηνίες σε μορφή mm/dd/yyyy αποθηκεύονται στη βάση (sql server 2005) Σωστά dd/mm/yyyy.

    Τι μπορώ να κάνω για να μπορώ να εισάγω ημερομηνίες από textbox ως dd/mm/yyyy και να προβάλλονται και ως dd/mm/yyyy

    Ευχαριστώ.
  •  08-05-2009, 13:38 50555 σε απάντηση της 50553

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

  •  08-05-2009, 14:02 50557 σε απάντηση της 50555

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Ευχαριστώ πολύ.
    Εν συντομία χρησιμοποιήσα
    <TextBlock Text="{Binding Date, StringFormat={}{0:MM/dd/yyyy}}" />

  •  08-05-2009, 14:51 50559 σε απάντηση της 50557

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Υπάρχει ένα μικρό πρόβλημα ακόμη...

    Ενώ κατά την προβολή της ημερομηνίας είναι οκ στην σωστή μορφή, όταν εισάγω σε ένα textbox την ημερομινία πρέπει να την εισάγω με mm/dd/yyyy

    Τι άλλο πρέπει να κάνω;

    Επίσης στο XAML στο σημείο του textbox που ορίζω το binding
    Text="{Binding Path=imerominia_kataxorisis, StringFormat={}{0:dd/MM/yyyy}}"

    μου βγάζει ένα error μετά το yyyy} και πριν το } και μου λέει
    Expected '

    Ωστόσο γίνεται κανονικά debug και τρέχει. Αλλά δεν μπορώ να κάνω reload το desinger.

    Κάτι κάνω γενικά λάθος;
     
  •  08-05-2009, 16:26 50566 σε απάντηση της 50559

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Χε χε... Το περίμενα ότι τελικά θα φτάναμε εδώ, αλλά ήθελα πρώτα να σε πάω από τον άλλον δρόμο. Το DataBinding είναι TwoWay και ενώ παίζει μια χαρά το "από το obejct στο control" , είδες ότι με την προηγούμενη λύση υπάρχει πρόβλημα στο "από το control στο object". Οπότε έρχεται η ώρα του IValueConverter. Ουσιαστικά, ορίζεις μια κλάση που επεξηγεί στον DataBinding μηχανισμό πώς θα κάνει τις δύο αυτές δουλειές. Δες εδώ http://karlshifflett.wordpress.com/2007/12/27/wpf-sample-series-formatting-data-binding-dates-and-numbers/ για το πως μπορείς να υλοποιήσεις μια τέτοια κλάση.


    Vir prudens non contra ventum mingit
  •  08-05-2009, 19:24 50574 σε απάντηση της 50566

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Καταρχήν σε ευχαριστώ για την όλη βοήθεια. Όπως θα έχεις καταλάβει είμαι σε αρχικά στάδια του προγραμματισμού, όχι γενικά αλλά στο visual studio συγκεκριμένα.

    Ψιλοκατάλαβα τι παίζει με τα converters αλλά δυσκολεύομαι να μεταφράσω τον κώδικα από vb σε c#.

    Ωστόσο το παλεύω και ελπίζω να βρω μια άκρη.

    Μου κάνει εντύπωση όμως γιατί να χρειάζεται όλη αυτή η διαδικασία. Νομίζω πως είναι βασική λειτουργία η σωστή αναπαράσταση δεδομένων από μια βάση και ο ορισμός της μορφής της.
    Κάνω λάθος;
  •  09-05-2009, 12:37 50590 σε απάντηση της 50574

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Ως προς την μετάφραση, υπάρχουν αρκετοί converters για μετατροπή από VB σε C# και το ανάποδο. Google is your friend. Θα σου πρότεινα πάντως να προσπαθήσεις να γράψεις μόνος σου τον converter ώστε να κατανοήσεις τη λειτουργία του και γενικά να μάθεις μέσα από αυτό. Μην ξεχνάς τη βοήθεια από το MSDN http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

    Τώρα, ως προς την διαδικασία, όχι δεν κάνεις λάθος. Και ακριβώς επειδή πρόκειται για μια βασική διαδικασία, υπάρχει αυτός ο τυποποιημένος και pluggable τρόπος για να μετατρέπεις τις τιμές κατά το data binding. Αν τον μάθεις, θα μπορέσεις αύριο να γράψεις εύκολα έναν converter που να μετατρέπει το True/False σε Visible/Collapsed, ένα color string σε ForeColor/BackColor, κλπ. Τα καλά νέα είναι ότι με το WPF στο .NET Framework 4.0 θα έρχονται out-of-the-box αρκετοί τέτοιοι converters.


    Vir prudens non contra ventum mingit
  •  11-05-2009, 12:24 50613 σε απάντηση της 50590

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Έχω δημιουργήσει την κλάση (Project->Add->Class έδωσα όνομα DateConverter) για τον converter όπως παρακάτω:
    public class DateConverter : IValueConverter
        {
         public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
           
             if (parameter != null) {
               
                string strFormatString = parameter.ToString();
                
                 if (!string.IsNullOrEmpty(strFormatString)) {
                     return string.Format(culture, strFormatString, value);
                   
                 }
             }
           
                
            return value.ToString();
        }
        
         public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
           
             System.ComponentModel.TypeConverter objTypeConverter = System.ComponentModel.TypeDescriptor.GetConverter(targetType);
             object objReturnValue = null;
            
             if (objTypeConverter.CanConvertFrom(value.GetType())) {
                 objReturnValue = objTypeConverter.ConvertFrom(value);
            }
          
               
            return objReturnValue;
        }
     
    }
    Στην συνέχεια έκανα μια αναφορά στα resources του window
    <StaticResource ResourceKey="DateConverter"/>

    Και τέλος έβαλα σε ένα binding τον converter
    Text="{Binding Path=imerominia_kataxorisis, Converter={StaticResource DateConverter}, ConverterParameter=’{}{0:dd MM yyyy}’, Mode=Default}"

    Ωστόσο όταν κάνω build μου βγάζει μήνυμα ότι δεν βρίσκει τo resource DateConverter
    Cannot find resource named '{DateConverter}'

    Κάνω κάτι λάθος; Κυρίως στην εισαγωγή resource.
  •  11-05-2009, 12:47 50614 σε απάντηση της 50613

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Ναι, χρειάζεται να κάνεις δύο πράγματα.

    1. Εφόσον η κλάση που έχεις φτιάξει ρίσκεται στο ίδιο assembly με το window, θα πρέπει να προσθέσεις ένα namespace για να μπορείς να αναφερθείς στην κλάση. Για παράδειγμα:

    1
    2
    3
    4
    5
    6
    7
     
    <Window x:Class="WpfLinq.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfLinq"
            Title="Window1"
            Height="300"
            Width="300">

    Η γραμμή 4 περιέχει το νέο namespace. Τυπικά, μόλις πληκτρολογίσεις

    xmlns:local="

    θα πρέπει να σου βγει παράθυρο για να επιλέξεις το assembly. Καλύτερα να χρησιμοποιήσεις ακριβώς αυτό το παράθυρο αντί να πληκτρολογίσεις το όναμα εσύ.

    2. Θα πρέπει να δηλώσεις σωστά το resource μέσα στο <Window.Resources>, κάπως έτσι:

    <local:DateConverter x:Key="dateConverter" />

    Οπότε πλέον μπορείς να πεις στο databinding: Converter={StaticResource dateConverter}

     

    Όπως και με το resource για το CollectionViewSource όπου δεν δηλώσαμε StaticResource αλλά γράψαμε 

    <CollectionViewSource x:Key="cvs" />

     έτσι και τώρα γράφουμε ως resource το όνομα της κλάσης. Απλά το CollectionViewSource είναι μέσα στο default namespace ενώ ο converter στο namespace που προσδιορίζεται με το "local"


    Vir prudens non contra ventum mingit
  •  11-05-2009, 13:14 50615 σε απάντηση της 50614

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Perfect.....
    Σε ευχαριστώ πολύ δουλεύει άψογα από ότι βλέπω.

    Νομίζω πως το Post έγινε καλός οδηγός για converter ημερομηνίας.
  •  11-05-2009, 13:24 50616 σε απάντηση της 50615

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Κάτι ακόμη...
    Σε κάποιο σημείο με C# αρχικοποιώ την τιμή του textbox με την σημερινή ημερομηνία όπως παρακάτω:

    DateTime simera = DateTime.Today;
                if (this.txtimerominia_kataxorisis.Text == "")
                {
                    this.txtimerominia_kataxorisis.Text = simera.Date.ToString();
                }

    Πως θα μπορέσω να μετατρέψω και εδώ την τιμή στην μορφή που θέλω;
  •  11-05-2009, 13:51 50619 σε απάντηση της 50616

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

  •  11-05-2009, 14:04 50620 σε απάντηση της 50619

    Απ: Μορφή ημερομηνία και εισαγωγη στη βάση

    Thanks. Απλά βάζουμε παράμετρο μέσα στο ToString
    this.txtimerominia_kataxorisis.Text = simera.Date.ToString("dd-MM-yyyy");
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems