08. november 2007 - 21:06Der er
10 kommentarer og 1 løsning
Opdatere et gridview i ASP.NET
Hejsa.
Har lidt problemer med at forstå logikken omkring opdatering af min SQL database ud fra hvad jeg taster i et gridview.
Jeg har et gridview, som henter nogle records ud og viser på min webside.
Det virker fint. Så har jeg en Edit commando knap til hver linje. Hvis jeg trykker på den, får jeg lov til at redigere den pågældende linje.
Jeg ville så gerne ved tryk på Update, kunne opdatere den pågældende record i min database.
Det forsøger jeg at gøre med følgende kode :
UpdateCommand="UPDATE dbo.tbinternaldepartments SET name = @name where id = @id">
Men @name er ikke den nye værdi jeg har indtastet. Det er den gamle værdi, inden jeg trykkede rediger.
Så hvordan får jeg fat i den nye værdi? Det er jo en textbox som jeg indtaster den nye værdi i, men denne bliver jo genereret automatisk af mit gridview, når man trykker på "Edit". Så hvordan ved jeg hvad denne textbox hedder, og hvordan kan jeg trække værdien ud?
Not really - fortæl - er værdien "forkert" når RowUpdating kører eller på hvilket tidspunkt ? GridView plejer at kunne håndtere opdateringere ganske ok
ellers ligger dine data i myGridView.Rows(myRowIndex).Cells(cellIndex).text (hvor cellIndex er kolonneindekset) og du har ikke har templatefields, og rowIndex kan du fiske ud af et eller andet event e.row.rowIndex eller e.RowIndex eller noget
Hmmm, nu prøver jeg lige at poste noget af den source VS genererer, og som jeg ikke kan få til at virke.
Når jeg forsøger at opdatere, siger den at mit felt i databasen ikke accepterer null værdier. Men forstår ikke hvorfor den vil sætte en null værdi ind.
Burde nedestående kode ikke opdatere min tabel med den nye værdi, som jeg taster i den textbox der kommer frem for hvert felt, når jeg trykker "edit" i mit grid?
Cannot insert the value NULL into column 'name', table 'EmployCreatingSystem.dbo.tbinternaldepartments'; column does not allow nulls. UPDATE fails. The statement has been terminated. ------------
Det nemmeste er at lave den forfra og klikke på at den selv skal lave update/insetr/delete stuff, så kan du se hvordan det bør se ud.
UpdateCommand="UPDATE dbo.tbinternaldepartments SET name = @departmentname where id = @id"> <UpdateParameters> <asp:ControlParameter ControlID="GridView1" Name="departmentname" PropertyName="SelectedRow.Cells[0].Text" />
1. Den får ikke noget id at spise 2. selected.rows.cells .bla bla er en usædvanlig formulering jeg ikke har set før:)
Ok, har dog lige fundet ud af noget. Kan se at man kan læse en masse events for et gridview i .cs filen, hvor alt min anden kode jo også ligger. Det virker meget mere logisk for mig, at slette alt den "%&¤/&-up" kode, som du helt korrekt siger det ;-)
Og så selv lave en sql updaterings kode i en metode, som fyres af af nogle af de mange events der hører til.
Eller lyder det helt forkert?
Hvis ikke, så forstår jeg bare ikke hvorfor VS laver alt den kode uden for C# .cs filen.
Men måske jeg bare heller skal prøve at forstå alt ;-)
Hmmm . nu er det altså ikke framworket der har &/%/%-up koden - hvem så ? :) Hvisdu nu trækker en sqldatasouce ind, og lader den lave hele mark-upen incl update/insert/delete, så kan du se hvordan det skal se ud:)
Og hvis du foretrækker at have sql i din cs så kan du da gøre det, men hvad skal du så bruge en sqldatasource til ? Tanken med en sqldatasource er nemlig træk/slip-data, uden at man skal rode for meget rundt. Hvsi du vil have meere kontrol så jo - så skal du selv hente data og smide op i en tabel eller noget som gridviewet kan bindes op imod, og så selv lave update/insert/delete håndtering, som du ellers fpr i fri tilgift til et gridview gift med en datasource
Hvis du ikke helt fatter alt det her så åbn din ServerExplorer, åbn din database og træk en tabel ind i din designer: så får du både gridview + datasource i et hug
en sqldatasource er i princippet for prototyping - de fleste sværger ved objectdatasource bundet op til ens business objects.. og så er der afvigere som mig som klør på med typed data sets)
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.