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

 

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

Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

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

    Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

    Καταρχάς καλημέρα. Εν δευτέροις απορία. Θέλω να περάσω την τιμή μίας μεταβλητής από ένα sub σε ένα άλλο.

    Αναλυτικά θέλω να κάνω το εξής:

    Θέλω μία μεταβλητή να κρατάει το serverpath (=κείμενο δηλαδή) του αρχείου που μόλις ανέβασα στο server, όχι στη βάση, μέσα σε ένα φάκελο. Το ένα sub είναι αυτό που ανεβάζει το αρχείο στο server. Ύστερα αυτή η τιμή να περνάει μέσα σε μία άλλη μεταβλητή, μέσα σε ένα άλλο sub, το οποίο sub είναι ένα InsertButton_Click, όπου με το κλικ μπαίνει στον πίνακα της βάσης η νέα εγγραφή. Εκεί έχω ένα πεδίο, στο οποίο αποθηκεύω το path.

    Θα μπορούσα να το κάνω με μία global μεταβλητή, αλλά σκέφτομαι μήπως θα ήταν καλύτερα να γινόταν μέσω get και set, η συναρτήσεων και subs??? Σκέφτηκα να φτιάξω ένα get set συνολάκι, αλλά δεν υπάρχει κλάση για να μπει το property, ο κώδικας μου είναι μέσα σε <script></script>.

    Επίσης άλλες δύο απορίες:

    1. Πως μετατρέπω String σε Integer, το CInt δεν κάνει;;;
    2. Το κουμπάκι που έχω βάλει για να κάνει upload το αρχείο, όταν το πατώ μου ενεργοποιεί τους validators που έχω βάλει στα υπόλοιπα textboxes. Εν τω μεταξύ το file upload control, και το κουμπάκι αυτό είναι μέσα σε update panel. Ναι και το Script Manager έχω βάλει.
    3. Για ρίξτε καμιά ιδέα στο τραπέζι-->The INSERT statement conflicted with the FOREIGN KEY constraint "SxesiProductsMeCategories". The conflict occurred in database "cubewareWeb", table "dbo.Categories", column 'id'.

    Εάν θέλετε επιπλέον πληροφορίες, let me know... arigato
  •  29-05-2008, 13:33 42514 σε απάντηση της 42513

    Re: Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

    Σε Session object δεν βολεύει να κρατάς αυτό που θέλεις;

    Για τα υπόλοιπα:

    1) Δοκίμασε το Convert. Και το CInt δουλεύει αλλά το Convert.toInt είναι καλύτερο γιατί μπορείς να περιορίσεις τον μέγεθος του integer.

    2) Δοκίμασε να σετάρεις το causesvalidation=false στο κούμπί αυτό. Ανάλογα με τα controls μπορεί να παίξει.

    3) Προσπαθείς να κάνεις Insert ένα Product χωρίς να υπάρχει το id της κατηγορίας του.

     


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  29-05-2008, 13:57 42516 σε απάντηση της 42513

    Απ: Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

    Μία μέθοδος μπορεί να καλέσει μία άλλη μέθοδο και να της περάσει παραμέτρους. Οπότε δεν είναι ξεκάθαρο τί ρωτάς. Υποψιάζομαι ότι προσπαθείς από ένα event handler να καλέσεις ένα άλλο event handler, ο οποίος φυσικά δεν δέχεται τις παραμέτρους που θέλεις να περάσεις. Η λύση είναι απλή: Μήν το κάνεις έτσι. Από τη στιγμή που έχεις ένα κομμάτι κώδικα που θέλουν να το καλέσουν δύο διαφορετικές μέθοδοι, φτιάξε μία νέα μέθοδο με τις παραμέτρους που χρειάζεσαι και κάλεσε τη νέα μέθοδο και από τους δύο event handlers. Το Visual Studio 2006 και το 2008 μάλιστα σε διευκολύνουν να το κάνεις αυτό με το "Extract Method" refactoring.

    Όσο για τις άλλες ερωτήσεις, νομίζω θα πρέπει να ρίξεις μία ματιά στο documentation ή σε κάποια βιβλία για το πως δουλεύουν οι validators, τί είναι τα foreign keys και πως δουλεύουν. Δοκίμασε να φτιάξεις κάποια απλά projects στην αρχή, ακολούθησε τα Walkthroughs και τα How To για να καταλάβεις τί είναι και πως δουλεύει το κάθε πράγμα. Διαφορετικά, θα ξοδέψεις πολύ χρόνο ρωτώντας τα βασικά. Γενικά, ελάχιστοι προγραμματιστές έχουν τόσο χρόνο διαθέσιμο ώστε να δουλεύουν χωρίς να κοιτάξουν το documentation.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2008, 14:01 42517 σε απάντηση της 42514

    Απ: Re: Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

    Το τρία το έφτιαξα και παίζει.

    Στο 2 το έφτιξα με τσάτσικο κόλπο. Απενεργοποίησα το causesvalidation και το έβαλα να κάνει validation όταν το πατάω. Δουλεύει μια χαρά

    Στο 1, πάλι τα ίδια, τίποτα. Σημειωτέον το DataValueField, από DropDownList θέλω να κάνω σε integer. Δοκίμασα και το VAL(). Καμιά ιδέα;;;


  •  29-05-2008, 14:09 42518 σε απάντηση της 42517

    Απ: Re: Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

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

    Λοιπόν εν ολίγοις για να μη διαβάσετε όλο τον κώδικα αν δεν μπορείτε αυτή τη στιγμή ή βαριέστε:

    1. Και τα δύο sub είναι στην ίδια σελίδα, μέσα στο ίδιο <script></script>.
    2. Το ένα ανεβάζει το αρχείο στο server, το άλλο γράφει στη βάση
    3. Ωστόσο η μία τιμή που θέλω να γράψω στη βάση, είναι το path του αρχείου στο server
    4. Πρώτα πατάω το κουμπάκι για ανέβει το αρχείο (το ένα το sub), και ύστερα κάνω την εγγραφή στη βάση πατώντας άλλο κουμπάκι (το άλλο το sub)


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
        Dim keepserverpath As String <-- η μεταβλητή που μεταφέρει τη τιμή από το ένα sub στο άλλο, όπου είναι bold είναι η μεταβλητή


    'Κώδικας του κουμπιού εισαγωγής εγγραφής
    Protected Sub InsertButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) <--Το πρώτο sub

    'Ορισμός μεταβλητών για να πάρουμε τις τιμές από τα controls του FormView
    Dim TempPCaption As TextBox
    Dim TempProductName As TextBox
    Dim TempProductDescription As TextBox
    Dim TempProductSupplier As DropDownList
    Dim TempProductCategory As DropDownList
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    'Ορισμός παραμέτρων για το Insert
    Dim ProductCaptionParameter As New Parameter
    Dim ProductNameParameter As New Parameter
    Dim ProductDescriptionParameter As New Parameter
    Dim ProductSupplierParameter As New Parameter
    Dim ProductCategoryParameter As New Parameter
    Dim ProductServerSideFilePath As New Parameter
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    'Βρίσκουμε τα control για την εισαγωγή κειμένων στη βάση
    TempPCaption = ProductManagementFormView.FindControl("PCaptionTextBox")
    TempProductName = ProductManagementFormView.FindControl("ProdNameTextBox")
    TempProductDescription = ProductManagementFormView.FindControl("DescriptionTextBox")
    TempProductSupplier = ProductManagementFormView.FindControl("SupplierDropDownList")
    TempProductCategory = ProductManagementFormView.FindControl("CategoryDropDownList")
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    'Βάζουμε στις InsertParameters τιμές

    '1. Product Caption Parameter
    ProductCaptionParameter.DefaultValue = TempPCaption.Text
    ProductCaptionParameter.Name = "ProductCaption"
    ProductCaptionParameter.Type = TypeCode.String

    '2. Product Name Parameter
    ProductNameParameter.DefaultValue = TempProductName.Text
    ProductNameParameter.Name = "ProductName"

    '3. Product Description Parameter
    ProductDescriptionParameter.DefaultValue = TempProductDescription.Text
    ProductDescriptionParameter.Name = "ProductDescription"

    '4. Product Supplier Parameter
    ProductSupplierParameter.DefaultValue = Convert.ToInt32(TempProductSupplier.DataValueField)
    ProductSupplierParameter.Name = "ProductSupplierID"

    '5 Product Category Parameter
    ProductCategoryParameter.DefaultValue = Convert.ToInt32(TempProductCategory.DataValueField)
    ProductCategoryParameter.Name = "ProductCategoryID"

    '6 Product Server Side File Path
    If keepserverpath = "" Then
    keepserverpath = "c:\"
    ProductServerSideFilePath.DefaultValue = keepserverpath
    ProductServerSideFilePath.Name = "ProductIconPath"
    Else
    ProductServerSideFilePath.DefaultValue = keepserverpath
    ProductServerSideFilePath.Name = "ProductIconPath"
    End If

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


    ProductSQLDataSource.InsertCommandType = SqlDataSourceCommandType.Text
    ProductSQLDataSource.InsertParameters.Add(ProductCaptionParameter)
    ProductSQLDataSource.InsertParameters.Add(ProductNameParameter)
    ProductSQLDataSource.InsertParameters.Add(ProductDescriptionParameter)
    ProductSQLDataSource.InsertParameters.Add(ProductSupplierParameter)
    ProductSQLDataSource.InsertParameters.Add(ProductCategoryParameter)
    ProductSQLDataSource.InsertParameters.Add(ProductServerSideFilePath)
    ProductSQLDataSource.InsertCommand = "INSERT INTO Products(ProdName, PCaption, Description, SupplierID, CategoryID, picon) VALUES (@ProductName, @ProductCaption, @ProductDescription, @ProductSupplierID, @ProductCategoryID, @ProductIconPath)"
    ProductSQLDataSource.Insert()
    ProductManagementFormView.ChangeMode(FormViewMode.ReadOnly)
    End Sub

    'Ανέβασμα του αρχείου
    Protected Sub FileUploadButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) <-- Το δεύτερο sub

    'Ορισμός μεταβλητών για το ανέβασμα του αρχείου
    Dim TempFileUpload As New FileUpload
    Dim TempResultLabel As New Label
    Dim ClientSideFileName As String
    Dim ServerSideFilePath As String
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    'Βρίσκουμε τα control για το ανέβασμα του αρχείου
    TempFileUpload = ProductManagementFormView.FindControl("PiconFileUpload")
    TempResultLabel = ProductManagementFormView.FindControl("UploadResultLabel")
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Ορίζουμε το path του server

    ServerSideFilePath = "C:\"

    'Εκίννηση διαδικασίας ανεβάσματος αρχείου
    If TempFileUpload.HasFile Then

    'Παίρνουμε το όνομα του αρχείου που βρίσκεται στον client
    ClientSideFileName = TempFileUpload.FileName

    'Ελέγχουμε αν αυτό το αρχείο είναι κενό ή είναι μεγαλύτερο από 4 MB
    If 0 < TempFileUpload.FileBytes.Length <= 2048 Then

    'Καθορίζουμε το path που θα αποθηκευτεί το αρχείο στο server + το όνομα του αρχείου
    ' και παίρνουμε το path για να το αποθηκεύσουμε στη βάση
    ServerSideFilePath = ServerSideFilePath + ClientSideFileName
    keepserverpath = ServerSideFilePath
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Ελέγχουμε αν υπάρχει ήδη το αρχείο με αυτό το όνομα
    If System.IO.File.Exists(ServerSideFilePath) Then
    TempResultLabel.Text = "Το αρχείο που προσπαθείτε να ανεβάσετε υπάρχει ήδη"

    Else

    'Ανεβάζουμε όλες τις πληροφορίες στο server
    Try
    TempFileUpload.SaveAs(ServerSideFilePath)
    TempResultLabel.Text = "Το αρχείο " + TempFileUpload.FileName + " ανέβηκε επιτυχώς"
    Catch ex As Exception
    TempResultLabel.Text = "Η εισαγωγή απέτυχε." + ex.Message
    End Try

    End If
    Else

    TempResultLabel.Text = "Το αρχείο είναι μεγαλύτερο από 2 MB"
    End If


    Else

    Dim setValueToValidator As RequiredFieldValidator
    setValueToValidator = ProductManagementFormView.FindControl("PiconFileUploadValidator")
    setValueToValidator.Validate()

    End If


    End Sub

  •  29-05-2008, 15:53 42520 σε απάντηση της 42517

    Re: Απ: Re: Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

    epp1123:


    Στο 1, πάλι τα ίδια, τίποτα. Σημειωτέον το DataValueField, από DropDownList θέλω να κάνω σε integer. Δοκίμασα και το VAL(). Καμιά ιδέα;;;

    Οοοπα, το DataValueField είναι το πεδίο όπου ορίζεις το binding για τα values του dropdownlist, και όχι η επιλεγμένη τιμή. Δεν θυμάμαι το control απ'έξω (infragistics και ξερό bread), αλλά νομίζω ότι αυτό που θέλεις είναι το DropDownList.SelectedValue ή .Value. 

    Πρόσεχε όμως με τα postbacks, γιατί αν ξαναγεμίζεις τα databound controls σε κάθε postback, θα χάνεις το selected value πρωτού τρέξει ο κώδικας σου στο click handler. 


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  29-05-2008, 16:04 42521 σε απάντηση της 42520

    Απ: Re: Απ: Re: Μεταφορά τιμής μεταβλητής από ένα sub σε άλλο sub.

    1. Ποια η διαφορά του Content Lenght από το FileBytes στο FileUpload; Διάβασα από το MSDN αλλά δεν μπορώ να πω ότι με βοήθησε.

    2. Πως ελέγχω αν το αρχείο είναι μεγαλύτερο από το επιθυμητό μέγεθος και αν είναι να μην ανεβαίνει;;; Ξέρω ότι πρέπει να ανέβει στον server πρώτα και ύστερα να κάνεις τους ελέγχους που θες. Το θέμα είναι ότι κάθε φορά που προσπαθώ να εισάγω ένα αρχείο μεγαλύτερο από το επιτρεπτό μέγεθος μου βγάζει "The connection was reset". Δοκίμασα ένα if που είχε μέσα FileUpload.PostedFile.ContentLength (τώρα αν ξέχασα κάτι ενδιάμεσα, σόρυ) > 4096 αλλά τίποτα. Το web.config είναι ρυθμισμένο ως εξής:

    <httpRuntime maxRequestLength="4096" executionTimeout="110" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100"/>. Διάβασα στο msdn για να τρία τελευταία.

    Αυτό που θέλω να κάνω ακριβώς είναι, όταν πάτάω το update Button στο FormView, στο EditItemTemplate , να κάνει τον έλεγχο που λέω στην αρχή. Δεν ξέρω ποιος είναι ο VB κώδικας που κάνει αυτή τη δουλειά. Δοκίμασα το System.IO.File.Delete αν θυμάμαι καλά το namespace, σε περίπτωση που το μέγεθος είναι πιο μεγάλο και αφού έχει γίνει το .SaveAs.




Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems