Hej igen
På en sida som jag har byggt så har jag både ett "formulär" men ett par input-fält och samtidigt en gridview ovanför formuläret.
När jag postar formuläret så läggs en post till som visas i griden.
Men om jag direkt efter använder gridens pagingknappar så postas formuläret igen. Varför?
Men, om du använder den inbyggda "pagingen" så postas sidan/formuläret igen för att pagingen använder sig av "postbackdata" så att säga för att kunna visa nästa sida, eller vilken sida man nu valt.
Men, det jag undrar är varför "en ny post" läggs till? Har du inte en speciell "spara knapp" som kör en specifik funktion för att spara datat? Den knappens "OnClick" ska specifiera en funktion som endast körs när data ska läggas till i databasen.
Det jag vill säga är att du INTE ska lägga till en ny post i "Page_Load" eventet genom att kolla om Page.IsPostBack är sant eller inte. Misstänker att det är så och att det därför "läggs till" en ny post.
Nej det ligger inte i Page_load, det ligger i en onClick på en knapp till en sub.
default.aspx -sidan:
...Formuläret med två textboxar
<asp:Button ID="Button1" runat="server" OnClick="addComm" Text="Skicka" />
default.aspx.vb -sidan:
Public Sub addComm(ByVal sender As Object, ByVal e As EventArgs)
If addComment(TextBox1.Text, TextBox2.Text, Session("loggedin")) Then
msg.Text = " (Posten tillagd)"
GridView1.DataBind()
TextBox1.Text = ""
TextBox2.Text = ""
js.Text = "<script type=""text/javascript"">window.onload = function(){setTimeout(""document.getElementById('" + msg.UniqueID.Replace("$", "_").Replace(":", "_") + "').style.display='none'"",3000);};</script>"
Else
msg.Text = "Fel!"
End If
End Sub
Private Function addComment(ByVal title As String, ByVal body As String, ByVal mid As Integer) As Boolean
connect("set_thread")
myCommand.Parameters.Add(New OleDbParameter("@title", OleDbType.VarChar, 100, ParameterDirection.Input))
myCommand.Parameters("@title").Value = title
myCommand.Parameters.Add(New OleDbParameter("@body", OleDbType.VarChar, 4000, ParameterDirection.Input))
myCommand.Parameters("@body").Value = body
myCommand.Parameters.Add(New OleDbParameter("@mid", OleDbType.Integer, 10, ParameterDirection.Input))
myCommand.Parameters("@mid").Value = Convert.ToInt32(mid)
Try
myConnection.Open()
myCommand.ExecuteNonQuery()
Return True
Catch ex As OleDbException
Return False
Finally
myConnection.Close()
End Try
Return False
End Function
'... Fler funktioner ...
Lägg in lite breakpoints eller traceutskrifter, så att du ser var "sidan tar vägen". Jag tycker t.ex. att det är lite konstigt att du verkar återanvända ett OleDbCommand.