Avatar billede fun22 Nybegynder
05. juli 2007 - 22:39 Der er 16 kommentarer og
1 løsning

vidre sende og validate

Hej

Hvordan validere man et detailview? Jeg bruger detailview til at insætte ting i databasen med, men hvordan validere jeg? For jeg kan ikke få de almindelige valigerings komponenter til at virke..

Og hvordan gør jeg sådan at den viderstiller til en anden side, når den har indsat informationerne i databasen? Og den skal have id med..
Avatar billede neoman Novice
06. juli 2007 - 14:02 #1
I detailsview lav alle felterne om til TemplateField. Når du editerer templaten for hvert field  så kan du trække alskens validatorer ind på felterne.

For at viderestille skal du jo nok ha en ekstra knap med postbackURL sat til den side hvor du vil hen, med ID tilføjet.

For at få ID tilbage se her : http://www.eksperten.dk/spm/644870
Avatar billede fun22 Nybegynder
06. juli 2007 - 22:35 #2
Den knap som "automatisk" bliver lavet som insertknap, kan man ikke bruge den?
Avatar billede fun22 Nybegynder
06. juli 2007 - 22:35 #3
Til viderstilling altså...
Avatar billede neoman Novice
06. juli 2007 - 23:58 #4
Indirekte jo. Du kunne smække en response.redirect ind i dataviewets iteminserted eventhandler.
Avatar billede fun22 Nybegynder
07. juli 2007 - 11:04 #5
Hvis jeg sætter det her ind giver det fejl:

OnItemInserted="Response.redirect = 'default.aspx'"
Avatar billede fun22 Nybegynder
12. juli 2007 - 15:45 #7
Jeg har nu fået noget bikset sammen, og den vidrestiller også godt nok, men den får ikke id'et med??

Sub DetailsView1_ItemInserted(ByVal sender As Object, ByVal e As DetailsViewInsertedEventArgs)
        Dim Connstr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
        Dim Connection As New SqlConnection(Connstr)

        Dim command As New SqlCommand("SELECT SCOPE_IDENTITY() AS NewID", Connection)
        Connection.Open()
        Dim Reader As System.Data.SqlClient.SqlDataReader
        Reader = command.ExecuteReader(CommandBehavior.CloseConnection)
        While (Reader.Read)
            Response.Redirect("BuyLink.aspx?AdID=" & Reader("NewID").ToString)
        End While
    End Sub
Avatar billede neoman Novice
12. juli 2007 - 16:14 #8
Det er fordi den skal gøre det på den samme connection som du foretog INSERT med. Din SCOPE_IDENTITY query skal således køre lige efter din INSERT, mens connection stadig er åben. Hvis du selv laver en INSERT statement så kan du hægte denne SELECT i rumpen på den, og f.eks. gemme værdien i en global variabel, hvorpå din ItemInserted handler blot skal hente den værdi og køre Response.Redirect.
Avatar billede fun22 Nybegynder
12. juli 2007 - 18:08 #9
Hvordan laver man en global variable i en SQL sætning?
Avatar billede neoman Novice
12. juli 2007 - 19:45 #10
Jeg mente en variabel som er deklareret på højere niveau end selve handleren, så du kunne sætte værdien et sted, og fiske den op et andet sted (et sted=én handler, et andet sted=en anden handler) - f.eks. Dim myNewID as Integer som den første linje i din kode fil, så ville den være tilgængelig fra alle handlerne.
Avatar billede fun22 Nybegynder
12. juli 2007 - 21:11 #11
Okay, men min sql sætning ligger ikke i min codebehind fil.. Den er i min datasource, og det skal jo så fiskes derfra og over i codebehind..
Avatar billede neoman Novice
13. juli 2007 - 10:39 #12
Her er et eksempel hvordan man kan gøre det med en sqldatasource http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.inserted(VS.80).aspx

Jeg har ikke kunnet finde noget bedre eksempel lige nu, men kigger videre.
Avatar billede fun22 Nybegynder
13. juli 2007 - 11:25 #13
Okay i min InsertCommand har jeg nu følgende:

...@Active); SELECT @NewID = SCOPE_IDENTITY()

Og i min CodeBehind har jeg:

    Sub On_Inserting(ByVal sender As Object, ByVal e As SqlDataSourceCommandEventArgs)

        Dim insertedKey As SqlParameter
        insertedKey = New SqlParameter("@NewID", SqlDbType.Int)
        insertedKey.Direction = ParameterDirection.Output

        e.Command.Parameters.Add(insertedKey)

    End Sub

    Sub On_Inserted(ByVal sender As Object, ByVal e As SqlDataSourceStatusEventArgs)
        Dim command As DbCommand
        Dim NewID As String
        command = e.Command

        ' The label displays the primary key of the recently inserted row.
        NewID = command.Parameters("@NewID").Value.ToString()
        Dim myTextBox As TextBox = CType(DetailsView1.Rows(15).FindControl("TextBox14"), TextBox)
        myTextBox.Text = NewID

    End Sub

Men der kommer ikke noget id tilbage til textbox 14 :( Og jeg har:
OnInserted="On_Inserted" OnInserting="On_Inserting" med i min datasource..
Avatar billede neoman Novice
13. juli 2007 - 12:24 #14
Jeg ville nok have gjort det ligeså.

Er du sikker på NewID får en værdi ? Check det i debuggeren eller en MsgBox(NewID.ToString)

Jeg ved ikke hvordan din detailsview ser ud, og hvad mode den er i, så derfor er der mange muligheder for ikke at finde TextBox14. I stedet for textbox14 (som ser ud til at ligge i en template), så kunne du lige lave en alm textbox på siden, og prøve at lægge værdien ind i den, dvs:
    Sub On_Inserted(ByVal sender As Object, ByVal e As SqlDataSourceStatusEventArgs)
        Dim command As DbCommand
        Dim NewID As String
        command = e.Command

        ' The label displays the primary key of the recently inserted row.
        NewID = command.Parameters("@NewID").Value.ToString()

        EnEllerAndenTestBOxPåSiden.Text = NewID

    End Sub
Avatar billede fun22 Nybegynder
13. juli 2007 - 13:46 #15
Den modtager godt nok et id.. Fandt jeg ud af med MsgBox(NewID.ToString)

Kan det godt passe at jeg ikke kan redirecte fra On_Inserted? For hvis jeg gør det gemmer den ikke noget i databasen..
Avatar billede fun22 Nybegynder
13. juli 2007 - 13:49 #16
Jo det virker nu.. Du skal endnu engang have mange tak for hjælpen.. Smider et svar..
Avatar billede neoman Novice
13. juli 2007 - 14:00 #17
og selv tak - jeg fik også lært noget her:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester