05. juli 2007 - 22:39Der 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..
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
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.
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.
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..
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()
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.