24. november 2004 - 14:34Der er
3 kommentarer og 1 løsning
ItemDataBound og <ItemTemplate>
Jeg har et datagrid som jeg med ItemDataBound ændrer indholdet i de enkelte celler.
Med værdi fra en BoundColumn kan jeg godt gøre dette:
//skift talværdi ud med tekst if (e.Item.Cells[3].Text != null) { //find ID int subKategoriType = int.Parse(e.Item.Cells[3].Text); //find teksten e.Item.Cells[3].Text = Data.subKategori.FindBysubKategoriID(subKategoriType).subKategoriNavn; }
Værdien i BoundColumn er sat med DataField = "subKategoriID"
I ItemColumn har jeg: <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "kategoriID") %> </ItemTemplate>
Hvordan kan jeg lave en tilsvarende if-sætning for kategori?
Det virker som om tekstværdien fra e.Item.Cells[2].Text bliver "". Hvorfor er den ikke et tal, som er det der bliver vist i mit datagrid?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
<%# DataBinder.Eval(Container.DataItem, "kategoriID") %> indsættes som en control (DataBoundLiteralControl) og ikke som text. For at tilgå teksten kan du skrive DataBoundLiteralControl dbl = (DataBoundLiteralControl)e.Item.Cells[2].Controls[0]; Response.Write(dbl.Text);
Det er kun i codebehind-filen du skal caste til en DataBoundLiteralControl. ASP.NET tolker åbenbart <%# DataBinder.Eval(Container.DataItem, "kategoriID") %> som en DataBoundLiteralControl i din aspx fil, så du skal ikke indsætte controllen direkte. Derfor findes den ikke i web forms-panelet.
Ja, rigtigt forstået. Men jeg får altså en InvalidCastException hvis jeg forsøger med en DataBoundLiteralControl. Så jeg holder mig til Literal, og den gør nøjagtigt det den skal!
Synes godt om
Ny brugerNybegynder
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.