Avatar billede speedpete Nybegynder
16. oktober 2007 - 11:44 Der er 9 kommentarer og
1 løsning

tilgå underliggende data i en GridIViewRow

Jeg har en underliggende sorteringsrækkefølge i de data, som jeg viser i mit GridView. Jeg henter sorteringsrækkefølgen ind via ObjectDataSource, og putter den ind i en kolonne, hvor jeg sætter Visible=false, så brugeren ikke kan se den.

<asp:TemplateField Visible="false">
    <EditItemTemplate>                         
              <asp:Label runat="server" ID="LabelSorternummer" Text='<%# Bind("Linienummer")  %>' />
    </EditItemTemplate>               
</asp:TemplateField>     


Jeg vil så lade brugeren flytte en række, så jeg har brug for at ændre feltet med sorteringsrækkefølgen, og så opdatere rækken ned til databasen. Problemet er, at jeg kun kan få det til at virke, hvis jeg lader den usynlige sorteringsrækkeølge være synlig som en kolonne....


I øjeblikket kan jeg gøre således for at finde et sorteringsnummer (Om kolonnen er Visible eller ej gør ingen forskel):
Single low = Convert.ToSingle(((Label)GridView1.Rows[placeBeforeRow - 1].FindControl("LabelSorternummer")).Text);

... men hvis jeg så ændrer teksten i LabelSorternummer og prøver GridView.Update(rownumer, false), så får jeg kun LabelSortnummer med i UpdateParameters, hvis kolonnen er Visible.


Så jeg ville lave en update-metode som bypasser ObjectDataSourcen, men her er så problemet: Hvordan får jeg fat i de underliggende data for hver GridViewRow uden at skulle hente dem via de kontroller, som de bor i i GridViewet?
Avatar billede neoman Novice
16. oktober 2007 - 11:49 #1
Hvis du tilføjer dit Linienummer til myGridView.DataKeyNames så vil værdien forblive tilgængelig, selv om du ikke viser kolonnen.
Avatar billede speedpete Nybegynder
16. oktober 2007 - 11:54 #2
Ja, det har jeg også prøvet, så hvad gør jeg forkert?
Eller sagt på en anden måde, hvad er den korrekte måde at programmatisk ændre værdien i et felt i en række, og derefter update?
Avatar billede neoman Novice
16. oktober 2007 - 12:05 #3
DataKeyNames indeholder "primærnøgler" som læst fra data, og man kan næppe ændre på dem.

Du kunne prøve et andet trick:

Lav en af de andre kolonner, ligegldig hvilken,  om til TemplateField.

I dette TemplateField har du så det felt som der nu var oprindeligt, og tilføjer dit LabelSorternummer felt, blot med .Visible=False for den label værdien er gemt i. Mon ikke dette burde virke ?
Avatar billede speedpete Nybegynder
16. oktober 2007 - 12:16 #4
??? ikke forstået. Skulle man tilføje en kontrol i en anden kolonnne end der, hvor den hører til? Deklarativt? Eller metoden som ændrer sorteringsnummeret?

Skulle det være for at omgås det problem, du omtaler med at DataKeyNames ikke kan ændres?

Hvad med ObjectDataSource.OnUpdating? Jeg tænkte om man ikke kunne bruge den på en aller anden måde? Her kan man jo tilgå og ændre UpdateParameters. Men hvordan får man kommunikeret hvilken række der skal ændres til hvad?
Avatar billede neoman Novice
16. oktober 2007 - 12:21 #5
Du kan sikkert lave noget med don obejct datasource, men det er da i mine øjne lidt besværligt.

Dit problem ligger i, at hvis du har en hel kolonne du har sat til visible=false, så bliver den vist ikke bundet til dataene eller i hvertfald ikke tilgængelig når .Update køres. Eftersom det gælder om at have værdier i din "LabelSorterNummer", og de alligevel ikke skal vises for brugeren, så er der ingen lov der siger at den label skal sidde i sin egen kolonne. For at få værdier ind i den, og kunne læse den igen, så kan du blot lægge den i et template field delt med en anden værdi. I første omgang kan du lade den forblive .Visible=True, og når det virker så sætte .Visible=False.

Er det klart ?
Avatar billede neoman Novice
16. oktober 2007 - 12:22 #6
Hvis ikke, så paste lige ASPX koden til dit gridview herind.
Avatar billede speedpete Nybegynder
16. oktober 2007 - 12:24 #7
Jep, det hjalp på det. Så hele problemet er, at man ikke skal skjule kolonnen men kun den label eller whatever man lægger værdien i? Det prøver jeg lige!
Avatar billede neoman Novice
16. oktober 2007 - 12:24 #8
nemmerlig :-)
Avatar billede speedpete Nybegynder
16. oktober 2007 - 13:16 #9
Jeg er sikker på at der er et eller andet rammende ordsprog for den situation, hvor man har været en hel masse omveje for at løse noget, og så er løsningen lige for næsen på en, og meget simpel. Det ville jeg så have skrevet her.

Smid et svar.
Avatar billede neoman Novice
16. oktober 2007 - 13:18 #10
svar:)
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