27. august 2002 - 12:13Der er
16 kommentarer og 1 løsning
form + rens + opdater
Hej Jeg har noget asp.net kode, der viser indhold af database. Ved indtastning i en form bliver nyt indhold gemt i databasen og vist.
Jeg har dog to problemer, måske mest fordi jeg ikke helt forstår asp.net: 1) Hvordan renser jeg formen, så nye data kan indtastes ? 2) Hvis man klikker på opdater, så sendes form-indhold igen og kommer til at ligge i databasen to gange. Hvordan undgår jeg det ? bodil
Du bliver nok nødt til at vise os noget kode, men umiddelbart kan du på serversiden rense indholdet af formen ved at sætte de korrekte proerties på server kontrollerne. Er det f.eks. en textbox sættes .Text="". Så længe din opdater knap er wired til en event handler der indsætter formens data i en database, så vil det ske hver gang der trykkes på opdater, men en mulighed er at sætte opdater knappen til en anden event handler når dine data er indsat!
......... Public Class nr2 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Viser dataindhold fra start ............ End Sub Sub opdate(ByVal sender As System.Object, ByVal e As System.EventArgs) ' ----------------------------------------------------------------- ' add a new row to the table Dim objTable As DataTable Dim objNewRow As DataRow
' ================================================================= ' generate the update commands Dim objBuilder As SqlCommandBuilder
objBuilder = New SqlCommandBuilder(objAdapter)
' ================================================================= ' update the data store objAdapter.Update(objDataSet, "FVVtable")
' ================================================================= ' refresh the data in the DataReader and bind it to a grid ' to prove that the data store has been updated
strSQL = "SELECT * FROM FVVtable" objConnection.Open() Dim objCmd As New SqlCommand(strSQL, objConnection) dgNameList1.DataSource = objCmd.ExecuteReader(CommandBehavior.CloseConnection) dgNameList1.DataBind() End Sub End Class
Sub ResetForm(ByVal sender As System.Object, ByVal e As System.EventArgs) fvvId.Text = "" name.Text = "" End Sub
Jeg er ikke helt klar over præcist hvad du ønsker i forhold til flere form posts i følge af hinanden. Én mulighed er at frakoble knappen efter 1. form post, det er relativt simpelt, idet du blot kan disable knappen i din event handler ved at gøre følgende:
Ups..... Ramte forkert.... Nå men her er fortsættelsen...
knap1.Enabled = False
En anden mulighed er at holde øje med om data allerede er indsat og hvis det er, så ændre det indsatte data i stedet for at indsætte det igen, dette er dog lidt sværere!
Du må vel vide om du sidder og redigerer data der allerede eksisterer, eller om du beder om at oprette noget nyt? Hvad med evt. at overveje instrukturering af måden hvorpå man vedligeholder data ?
Jeg indsætter data. Overskriften med opdatering henviser til at opdatere browseren- upræcist, men skrevet lige før madpakken blev åbnet. (Ville måske være ligeså upræcist formuleret efter spisning) Andgående at overveje strukturering, så er alt bare så nyt og uoverskueligt. Jeg var glad for at det er lykkes at få kontakt med databasen og få vist data. Desuden virker det også med at indsætte data, men så dukkede problemerne op. - hvis man opdater browseren skriver den formens data ind i databasen igen , så posten gentages deri, og det er jo ikke smart.
Kan du ikke blot lave en query for om data allerede findes? Hvis ikke skal det jo indsættes. Så kan man selvfølgelig ikke indsætte den samme post to gange, hvis det virkelig er det man vil.
For mig at se, lyder det også som om fremgangsmåden ikke er gennemtænkt. Du skal ikke være bange for at lave meget om. Det bliver ALTID bedre! -og ikke mindst lærer du helt sikkert noget.
Databasen - som jeg ikke bestemmer over - kan indeholde ens poster. Det burde nok ikke være muligt, men sådan ser verden ud. Mit problem er så, at brugeren vil (ved en fejltagelse) kunne komme til at sende sin indtastning ind to gange, ved at opdatere skærmen. Når man opdaterer skærmen sender man de data der står i formen. Hvis dataene er slettet med delete-tasten og ikke kan ses, bliver de alligevel (i min kode) sendt til databasen. Jeg vil lave en kode hvor data godt kan gentages, men det skal være bevidst.
Jeg kan godt se problemet... kan du evt. logge at denne side ikke dur mere, ved at gemme noget i en Session variabel? Jeg ved det ikke er kønt, men det burde man kunne.
I ovenstående inlæg burde jeg ikke ha' skrevet opdatere skærmen. Jeg mener: trykke på browserens opdater-knap. Jeg har lavet en reset-knap som z42cool foreslår. Hvis jeg og vælger reset, så glemmes de indtastede data og man må trykke på opdater knappen så meget man lyster uden problemer. Det er fint. Regnede med at hvis jeg bare kaldte "resetform"-proceduren fra "opdate"-proceduren, så ville data være glemt. Men det er de ikke. De kan ikke ses i formen, men sendes stadig til databasen ved tryk på opdater-knappen.
reffak>> Så længe runat="server" skal .net runtimen nok behandle <asp datagrid/> taggen og rendere det korrekte html. Hvis den ligger udenfor <form/> taggen bliver kontrollens data dog ikke posted med tilbage og state for kontrollen fungerer derfor ikke, men det er givetvist ikke det store problem lige i dette scenarie!
Det tog lidt tid at turde være dirty. Men hellere bevidst dirty end bare småuvidende. Det sidste er jeg vant til så hvorfor ikke også dirty. Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.