02. juli 2006 - 23:43Der er
9 kommentarer og 1 løsning
Update GridView
Hej,
Jeg har lige et problem med GridView og UpdateDataSource.
Jeg har bundet et gridview til et datasets datatable som trækker alle poster ud fra en tabel.
Men når jeg skal lave en edit og update, virker det kun når alle columns i GridView'et er Visible=True og ReadOnly=True (undtagen lige den første ID-column).
Jeg vil gerne have at nogle columns ikke skal være synlige og/eller ikke editérbare. Men hvis jeg sætter en af dem til visible=false eller/og ReadOnly=False og laver en update, så opdateres rækken alligevel med et "" eller Null. Så går jeg ind i update-sætningen og fjerner "GivneTabel = ?", men herefter vil den slet ikke update nogen columns. Så går jeg ind og fjerner yderligere parameteren for "GivneTabel" og herefter får jeg en fejlmeddelelse:
"ObjectDataSource 'ObjectDatasource1' could not find a non-generic method 'Update' that has parameters: ... "
Jeg har en tabel 'VareTabel' som indeholder: Id, Vare, Kategori, Indkober, Pris, Rating
Det smider jeg i et 'DataSet1' og genererer Select- og Updatecommands Det binder jeg så via et ObjectDataSource til et GridView.
'Id' er primærnøgle og står i GridView'et pr. default til ReadOnly=True Herefter virker det fint når jeg laver en update.
Men jeg vil så at:
'Kategori' skal være synlig men ikke opdateres. Den sætter jeg ReadOnly=True 'Indkober' skal være skjult, og egentlig bare opdatere med dens egen værdi. Den sætter jeg til Visible=False.
Det der sker her er så bare, at hvis jeg laver en update med det, opdaterer den de to kollonner til intet. Hvis jeg fjerner dem fra update-sætningen samt deres parametre får jeg en.
"ObjectDataSource 'ObjectDatasource1' could not find a non-generic method 'Update' that has parameters: ... "
Koden ser således ud:
DataSet1: (Nøjes lige med at poste de to commands)
Når du sætter ReadOnly til false medfører det, at værdien holdes ude af det dictionary der der sendes mod din update. Hvis du angiver feltet under datakeynames vil du kunne sikre at det senders mod metoden alligevel. Så jeg vil tror at du kan komme igennem sådan her:
Men det er jo fint hvis DataKeyNames sørger for at værdierne bliver bevaret her. Det vil jeg lige prøve.
Alternativt har jeg hidtil gjort at konvertere de columns jeg gerne vil have vist men ikke redigeret til template columns - og så bare udskiftet itemtemplate's textbox med en label så den ikke er mulig at redigere. Men jeg tror dit eksempel vil være noget mere behændigt i længden :-)
Det ser ud til at virke godt nok når det er ReadOnly, men stadig når en kollonne er visible="false" vil den bruge update-sætningen og update med Null. Måske der burde være en property der hed UpdateVisible tilsvarende InsertVisible?
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.