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

 

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

Programming and More

Δεν μου αρέσει να κλέβω τις ιδέες των άλλων, αλλά λατρεύω να με βοηθούν και και να βοηθάω.

  • think global act Irish

    αναπτύσω ένα site το οποίο απευθείνεται σε Ευρωπαίους και θα είναι διαθέσιμο σε Αγγλικά,Γερμανικά,Γαλλικά. Στο site μεταξύ άλλων θα εμφανίζονται ημερομηνίες και ποσά σε ευρώ. Οι τιμές αυτές θα πρέπει να περνάνε και από σελίδα σε σελίδα ('να ναι καλά το previouspage).

    Στα γερμανικά και τα γαλλικά τα πράγματα είναι απλά. Ορίζεις το currentCulture και το currentUICulture και τα πάντα δουλεύουν μόνα τους.

    Με τα αγγλικά όμως; Αν το αφήσεις default σου εμφανίζει τις ημερομηνίες με τη μορφή ΜΜ/DD/YYYY που είναι σπαστικό. Αν εμφανίσεις την ημερομηνία "με το χέρι " στη μορφή που θέλεις πρέπει να κάνεις το ανάποδο όταν την διαβάζεις για να το περάσεις στην επόμενη σελίδα. Το ίδιο με τα ποσά και την τελεία με το κόμμα. Και φυσικά σου πετάει και το δολλάριο στα ποσά. Ακόμη χειρότερα όταν όλα αυτά πας να τα περάσεις με παραμέτρους στον SQL server πρέπει πάλι να διορθώνεις. Δεν είναι λύση αυτή. Οι άγγλοι έχουν τη Στερλίνα οπότε δεν βοηθούν.

    Να ναι καλά οι ιρλανδοί. Μιλάνε αγγλικά, γράφουν τις ημερομηνίες "ευρωπαϊκά" και έχουν και το ευρώ. Άρα αρκεί να δηλώσουμε "en-ie" στο currentCulture και το currentUICulture και όλα παίζουν μια χαρά χωρίς να χρειαστεί να πειράξουμε τίποτα. Όλες οι toString παίζουν όπως θέλουμε, οι μετατροπές από string σε datetime και decimal γίνονται μια χαρά και το .net αναλαμβάνει να στείλει στον sql server τις παραμέτρους όπως πρέπει.

    άρα: think global act Irish
    Δημοσιεύτηκε στις Κυριακή, 22 Απριλίου 2007 7:59 μμ από το μέλος agmarios | 0 σχόλια
  • Έλεγχος εγκυρότητας ΑΦΜ σε T-SQL

    ο αλγόριθμός του cgeo για τον έλεγχο εγκυρότητας ΑΦΜ γραμμένος σε T-SQL. Τον αρχικό σε VB μπορείτε να τον βρείτε εδώ 

    -- returns 1 if valid, 0 if not valid
    create  function checkAFM(@vatId nchar(9)) returns bit
    as
    begin

    declare @i int
    declare @sum int
    declare @residual int
    declare @lastdigit int
    declare @isValid bit

    set @sum = 0
    set @i = 0

    while @i < 8
     begin
      set @sum = @sum + power(2,(8 - @i))* cast(substring(@vatId,@i+1,1) as int)
      set @i = @i + 1
     end

    set @residual = @sum % 11
    if @residual = 10
      set @lastdigit = 0
     else
      set @lastdigit = @residual

    if @lastdigit = cast(substring(@vatId,9,1) as int)
      set @isValid = 1
     else
      set @isValid = 0

    return @isValid
    end

    Δημοσιεύτηκε στις Τρίτη, 25 Ιουλίου 2006 11:58 πμ από το μέλος agmarios | 3 σχόλια
  • operator overloading στη VB.net 2005

    Μια λειτουργία που υπήρχε αρκετά χρόνια σε άλλες γλώσσες και έλειπε από την VB ήταν η operator oveloading. Η δυνατότητα δηλαδή να ορίσουμε operators (τελεστές) πάνω στις κλάσεις μας. Ας δανειστούμε από τα μαθηματικά ένα κλασσικό και σχετικά απλό παράδειγμα, τους μιγαδικούς αριθμούς. Αυτοί αποτελούνται από ένα πραγματικό μέρος και ένα φανταστικό μέρος.

    Αρχικά λοιπόν η κλάση μας είναι:
    Public Class complexNumber
        Public real As Double
        Public imaginary As Double

        Public Sub New(ByVal r As Double, ByVal i As Double)
            Me.real = r
            Me.imaginary = i
        End Sub 
       Public Overloads Function ToString() As String
            Return (Me.real.ToString & " + " & Me.imaginary.ToString & "j")
        End Function
    End Class

    για να προσθέταμε  2 μιγαδικούς αριθμούς θα έπρεπε να φτιάξουμε μια συνάρτηση:
    function addComplex(c1 as complexNumber, c2 as complexNumber) as complexNumber
    return new complexNumber(c1.real + c2.real, c1.imaginary + c2.imaginary)
    end function

    στην τελευταία έκδοση όμως της vb μπορούμε να ορίσουμε πώς προσθέτουμε, αφαιρούμε ή ό,τι άλλο θέλουμε τα αντικείμενά μας οπότε έχουμε:
    Public Class complexNumber
        Public real As Double
        Public imaginary As Double

        Public Sub New(ByVal r As Double, ByVal i As Double)
            Me.real = r
            Me.imaginary = i
        End Sub

        Public Overloads Function ToString() As String
            Return (Me.real.ToString & " + " & Me.imaginary.ToString & "j")
        End Function

        Public Shared Operator +(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
            Return New complexNumber(c1.real + c2.real, c1.imaginary + c2.imaginary)
        End Operator

        Public Shared Operator -(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
            Return New complexNumber(c1.real - c2.real, c1.imaginary - c2.imaginary)
        End Operator

        Public Shared Operator *(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
            Return New complexNumber(c1.real * c2.real - c1.imaginary * c2.imaginary, c1.real * c2.imaginary + c1.imaginary * c2.real)
        End Operator
    End Class

    τώρα αρκεί να γράψουμε
    ....
    Dim c1 As complexNumber = New complexNumber(2, 3)
    Dim c2 As complexNumber = New complexNumber(6, 7)
    Dim c3, c4, c5 As complexNumber
    c3 = c1 + c2
    c4 = c1 - c2
    c5 = c1 * c2
    ....

    Τέλος υπάρχει η περίπτωση να θέλουμε να κάνουμε πράξεις μεταξύ μιγαδικών και πραγματικών αριθμών. Για να το επιτύχουμε αυτό μπορούμε να ορίσουμε πώς θα γίνεται η μετατροπή των πραγματικών (double) σε μιγαδικούς κάνοντας χρήση της CType

    Public Class complexNumber
        Public real As Double
        Public imaginary As Double

        Public Sub New(ByVal r As Double, ByVal i As Double)
            Me.real = r
            Me.imaginary = i
        End Sub

        Public Overloads Function ToString() As String
            Return (Me.real.ToString & " + " & Me.imaginary.ToString & "j")
        End Function

        Public Shared Operator +(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
            Return New complexNumber(c1.real + c2.real, c1.imaginary + c2.imaginary)
        End Operator

        Public Shared Operator -(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
            Return New complexNumber(c1.real - c2.real, c1.imaginary - c2.imaginary)
        End Operator

        Public Shared Operator *(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
            Return New complexNumber(c1.real * c2.real - c1.imaginary * c2.imaginary, c1.real * c2.imaginary + c1.imaginary * c2.real)
        End Operator

     Public Shared Widening Operator CType(ByVal d As Double) As complexNumber
            Return New complexNumber(d, 0)
        End Operator
    End Class

    οπότε μπορούμε να γράψουμε και τα παρακάτω:
    .....
    Dim c1 As complexNumber = New complexNumber(2, 3)
    Dim c2 As double= 3.14159
    Dim c3, c4, c5 As complexNumber
    c3 = c1 + c2
    c4 = c1 - c2
    c5 = c1 * c2
    ....

    Δημοσιεύτηκε στις Παρασκευή, 30 Ιουνίου 2006 4:00 μμ από το μέλος agmarios | 0 σχόλια
  • μικρές προσθήκες σε έτοιμα web controls

    Πολύ συχνα χρειαζόμαστε ένα web control με συγκεκριμές ιδιότητες ή λειτουργίες σε πολλές web forms ή και σε πολλά projects. Για παράδειγμα έχουμε ένα dropdownlist το οποίο διαβάζει τα δεδομένα από τη βάση. Θέλουμε να υπάρχει μια πρώτη επιλογή του τύπου please select με τιμή 0.

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

    Sub Page_Load(sender as Object, e as EventArgs)
     If (Not Page.IsPostBack)  then
          .......
          myDropDown.datasource = dbSource
          myDropDown.databound
          myDropDown.items.insert(0,new listItem("please select",0))
          ....
       end if
    end sub

    και στη σελίδα μας απλά να έχουμε to dropdown

    <form runat="server">
       <asp:dropdownlist id="myDropDown" runat="server" DataTextField="....." DataValueField="....." />
    </form>

    η δεύτερη δυνατότητα είναι να φτιάξουμε ένα δικό μας dropdownlist control το οποίο θα κληρονομεί όλα τα properties,methods,events του dropdownlist αλλά θα προσθέτει το item μόνο του αφού γίνει το databind. Θα έχει δηλαδή το δικό του DataBound event handler

    στο αρχείο λοιπόν /app_code/mycontrols.vb δηλώνουμε την κλάση μας
    Imports Microsoft.VisualBasic
    Imports System
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports System.ComponentModel

    Namespace myControls
       Public Class selectDropDown
            Inherits DropDownList

            Public Sub addSelect(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.DataBound
                If Me.Items.Count > 0 Then
                    Me.Items.Insert(0, New ListItem("select", 0))
                    Me.Enabled = True
                Else
                    Me.Items.Insert(0, New ListItem("no items", 0))
                    Me.Enabled = False
                End If
            End Sub
        End Class
    end Namespace

    στο web.config δηλώνουμε που βρίσκεται το namespace: (το γεγονός ότι βάλαμε την κλάση μας στο /app_code μας γλιτώνει από πολλούς μπελάδες)
    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
       <system.web>
          <pages >
             <controls>
                <add tagPrefix="custom" namespace="myControls" />
             </controls>
          </pages>
       </system.web>
    </configuration>

    και στη σελίδα μας απλά προσθέτουμε το control μας:
    <form runat="server>
       <custom:selectDropDown ID="
    myDropDown"  DataSourceID="..." DataTextField="..." DataValueField="..." runat="server" />
    </form>

    Δημοσιεύτηκε στις Παρασκευή, 9 Ιουνίου 2006 6:47 μμ από το μέλος agmarios | 0 σχόλια
    Δημοσίευση στην κατηγορία:
  • Σκοπός του blog

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

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

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

    Δημοσιεύτηκε στις Πέμπτη, 8 Ιουνίου 2006 5:48 μμ από το μέλος agmarios | 0 σχόλια
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems