29. november 2007 - 22:52Der er
10 kommentarer og 1 løsning
Tilføj række til et datagrid
Hej, jeg er i gang med at lave en side, hvor man skal kunne tilføje nogle indtastninger til et datagrid og efter man har tilføjet det antal rækker man vil, så skal alt der er i det datagrid gemmes i en database, men jeg kan ikke få lavet denne dynamiske tilføjelse på siden. Hvordan kan man "gemme" de informationer der bliver indtastet før det bliver submittet?
Du kan ikke gøre dte direkte, da et DataGrid ikke har nogen mekanik til at tilføje.
Er det et DataGrid (som i net 1.1 eller GridView som i .NEt 2) ?
Hvis dit grid er bundet til en data source, så er fuskermetoden at lave en knap som kalder datasourcens Insert method, rebinder griddet, og derpå sætter griddet i editmode i den pågældende linje - not recommended!
En mere anstændig metode er bruge FormView eller DatailsView (hvis du altså kører .NET 2+) bundet til samme datasource, og blot have den control i InsertMode. Efter Insert rebinder man griddet - googl på "gridview master-detail", og der er tons af eksempler.
Finally, i et GridView er der nogle som smækker lidt controls ned i GridView'et footer samt en Add Record knap, som så kalder datasourcens Insert med værdierne fra de kontroller.
okay, jeg har allerede være ved at lave et DataSet og lave Columns og så add til dem, men jeg tror mit støreste problem er at jeg ikke kan få den til at oprette dette DataSet korrekt, for når jeg vil add noget til det, så er det som om at det bliver oprettet på ny og det der stod i det før bliver slettet...
Lave columns og adde til dem ? Det lyder lidt mystisk. Prøv at forklare hvad der skal ske et skridt ad gangen. Forklar step-by-step (som til en sinke) hvad du har af data og hvor de ligger, og hvad du ønsker at gøre med dem, så kan j hjælpe dig.
1. Når siden loades skal der laves et datagrid (eller gridview hvis det er bedre) som skal vis 2 informationer: navn og alder. Fra start af er der ikke noget at vise da der ikke er tilføjet noget, men der skal så være to tekstfelter som man til indtaste info i.
2. Når man indtaster info i tekstfelterne og klikker på en add knap, så skal den info gemmes på siden (som jeg har forsøgt at gøre i et dataset) og det skal så vises i mit datagrid. Man skal så have mulighed for at tilsøje så mange personer som man vil og de skal hele tiden listes efterhånden som de tilføjes.
3. Når man har de personer man vil have, så skal man kunne klikke på en knap og derefter skal alt indholdet indsættes i en database.
Den normale mekanik til den slags er: GridView - viser hvad du har, og tillader editering (ingen inserts)
FormView eller DetailsView - tillader Insert. Denne insert ville man normalt sende direkte til DB, og så har man det hele i gridviewet ved følgende DataBind.
Hvis du insisterer på først at gemme når færdig med det hele, så ja - lav en DataTable. Den skal du så gemme i Session for hver postback, ellers er den pist væk.
Du kan binde dit gridview til den , og opdatere gridviewet ved hver ny række.
Du kan tilføje en række ved at tage et FormView/Detailsview og bruge dem til dette.
En nemmere ting er nok at simpelthen tage nogle textboxe og lave en knap som tilføjer textboxenes indhold til din DataTable.
Så kan du lave en dataadapter som tager din DataTable og smider den i db'en når du kalder adapterens Update metode.
Det skal "gemmes på siden" fordi at jeg først vil have det ned i databasen når man er helt færdig med at indtaste info, det er en tilmeldingsform, hvor det er meget forskellige hvormange personer der tilmeldes ad gangen.
Jeg ved ikke om jeg er "strandet" er nu mere meget åben overfor muligheder til at løse problemet. Tror mit størreste problemer er at få dataen gemt rigtigt og undgå at det bliver slettet under et postback
Dim MyTable as DataTable ' denne linje øverst, såden har scope over hele siden
i din PageLoad
ligeledes i din pageload: IF Not Page.IsPostBack Then 'byg din DataTable her ' når færdig med byggeriet, så Session("MyTable") = MyTable ' vær varsom med hvad der står i "Session" - det er case-sensitive Else If Not IsNothing(Session("MyTable")) Then MyTable = CType(Session("MyTable"),DataTable) GridView1.DataSource=MyTable GridView1.DataBind else MsgBox("Sorry - din session er død, start igen")' msgbox virker kun lokalt, ej på web End IF End If
og så i din kode kan du tilføje til din DataTable, og eftersom dens reference er gemt i session så behøver du ikke at foretage dig mere
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.