Avatar billede weis Nybegynder
29. november 2007 - 22:52 Der 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?
Avatar billede neoman Novice
29. november 2007 - 23:05 #1
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.
Avatar billede weis Nybegynder
29. november 2007 - 23:23 #2
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...
Avatar billede neoman Novice
29. november 2007 - 23:30 #3
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.
Avatar billede weis Nybegynder
29. november 2007 - 23:35 #4
okay.

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.
Avatar billede neoman Novice
29. november 2007 - 23:53 #5
Hmm "gemme på siden" - hvorfor ?

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.
Avatar billede neoman Novice
30. november 2007 - 00:00 #6
Hvad er du strandet på specifikt ?
Avatar billede weis Nybegynder
30. november 2007 - 00:20 #7
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
Avatar billede neoman Novice
30. november 2007 - 00:24 #8
Den der med at gemme ser sådan her ud (i VB)

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
Avatar billede neoman Novice
30. november 2007 - 00:31 #9
hehe fik sku ikke editeret "i  din pageload" væk - den Mytable skal naturligvis ikke sidde i en handler men udenfor, for at få scope til hele siden)
Avatar billede weis Nybegynder
30. november 2007 - 00:51 #10
det er kommet til at virke nu, super, kom med et svar :)
Avatar billede neoman Novice
30. november 2007 - 00:51 #11
weeeee:)
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