Avatar billede Simon Praktikant
30. marts 2006 - 09:14 Der er 4 kommentarer og
2 løsninger

skjule id-kolonne i gridview men stadig gemme data bag facaden

Der er et DataTable MyDataTable, som der laves en select() på, hvorved man får et array af Rows, eks. MyDataTable har en myID kolonne.

DataRows[] rows = MyDataTable.Select("blah blah");

Dette array af Rows fylder jeg ny ind i et GridView på asp-siden.

MyGridView.DataSource = rows;

Jeg skjuler kolonnen med myID på gridview.

På mit GridView har jeg en kolonne til at slette og en til at redigere de enkelte rækker.

Problemet består i at identificere den række jeg har trykket på. Det er ikke noget problem at få index på rækken i mit Gridview, og dermed i row[]. Men det jeg ønsker er myID for den række jeg har trykket på. Men myID i mit gridview har jeg jo skjult. Kan jeg gemme myID for hver række i mit gridview, men bag facaden så brugeren ikke ser det?

bemærk:
Jeg har tidligere stillet det samme spørgsmål her:
http://www.eksperten.dk/spm/698881
uden at få svar, så jeg har omformuleret det. Den med svaret får point for begge spørgsmål.
Avatar billede davidfossil Nybegynder
30. marts 2006 - 09:28 #1
Prøv lige at kigge på GridView's DataKeyNames og DataKeys properties:
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeynames(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeys(VS.80).aspx

Når du deklererer dit GridView sætter du DataKeysNames="myID", og så bliver din værdi automatisk gemt når du databinder. Senere kan du så få fat i værdien gennem DataKeys når du kender et index.
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 17:22 #2
Du får din id værdi ud på denne måde:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = GridView1.Rows[index];
            int id= (int)GridView1.DataKeys[row.DataItemIndex].Value
}

På dit gridview sætter du

<asp:gridview id="GridView1" Runat="Server" OnRowCommand="GridView1_RowCommand" DataKeyNames="ID">
<columns>
<asp:BoundField DataField="ID" Visible="false" />
</columns>
</asp:GridView
Avatar billede Simon Praktikant
30. marts 2006 - 19:40 #3
Tak til jer begge to. I første omgang fik jeg det ikke til at virke med det første forslag. Jeg satte MyGridView.DataKeyNames til et array af strings før jeg databinder, men fik det ikke til at virke. Mit grid blev blot vist uden data i.

Men nu kan jeg godt se at jeg jo skal DataKeyNames i asp-koden i stedet for, og så virker det.

Tak til jer begge to. HVis du også smider svar davidfossils, så får du halvdelen af point.
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 20:00 #4
Det er kun mig som mangler at smide et svar :)
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 20:15 #5
hvilket jeg så lige gør :)
Avatar billede Simon Praktikant
31. marts 2006 - 08:54 #6
Hermed point til jer, og tak for hjælpen. Hvis I også lige smider et svar på den anden side jeg refererre til får I også point for dette spørgsmål.
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