HTML-koden til ASP.NET kontroll

Det hender en gang i blandt at jeg trenger å få tak i html-koden som en ASP.NET kontroll genererer. F.eks. kan dette være nyttig dersom du ønsker å eksportere en DataGrid til Excel. Alle ASP.NET server kontroller har en metode som heter RenderControl. Ved å benytte denne metoden kan man få tak i HTML koden som blir generert. Her er ett eksempel:

La oss si at jeg har en DataGrid på en side som er fylt med data. For å få tak i HTML-koden kan jeg da skrive:

System.IO.StringWriter sWriter = new System.IO.StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(sWriter);

DataGrid1.RenderControl(htmlWriter);

string sHTMLkode = sWriter.ToString();

Skulle du nå ha lyst til å sende dette til Excel kan du da bare skrive:
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=data.xls");
Response.Write(sHTMLkode);
Response.Flush();
Response.Close();

Windows autentisering i koblingsstrengen

Ofte når man skal koble en applikasjon opp mot SQL Server så ønsker man å benytte Windows autentisering i stedet for å skrive inn brukernavn og passord i koblingsstrengen. Dette av bl.a. sikkerhetsmessige årsaker. For å benytte Windows autentisering må koblingsstrengen enten inneholde Trusted_Connection=Yes eller Integrated Security=SSPI. Begge gir samme effekt.

Eksempler på koblingsstrenger blir da:

"server=MyServer; Integrated Security=SSPI; database=Northwind"
"server=MyServer; Trusted_Connection=Yes; database=Northwind"


Låsing av tittel-linje

For noen år siden, da jeg begynte med ASP.NET, skulle jeg lage en webapplikasjon for en kunde. Kunden ville at tittel linjen på tabellene skulle låses ved scrolling (beklager at jeg bruker engelske ord, men jeg har noen ganger problemer med å komme med norsk oversettelse på dataord).
Løsningen min den gang var å lage to tabeller, en som bare var tittel linjen, og en som var selve tabellen med dataene. Ved oppkjøringen av siden måtte jeg kjøre ett javascript som satte størrelsen på cellene i titteltabellen til det samme som datatabellen. Ikke en veldig god løsning, den var langt fra perfekt, men det virket.
Så, tidligere i år kom jeg over denne artikkelen fra The Code Project: The Freeze Pane DataGrid.
I denne artikkelen beskrives hvordan man ved hjelp av stylesheet expressions kan få samme effekt. Kort forklart går metoden ut på at man oppretter først en DIV-tag som definerer området som tabellen kan strekke seg ut i. Dersom tabellen blir større enn DIV'en vil DIV området få scrollbars. Dette oppnår man ved å sette overflow stilen til auto.
style="overflow: auto;"
I DIV-taggen legger man så inn en DataGrid. Ved så å tilordne en gitt css-stil (forklares under) til tittel (header) i DataGrid'en vil tittelen låses ved scrolling. Stilen som tittelen skal få lagrer du evt. i en egen stylesheet. Stilen ser slik ut:
.lockedHeader
{expression(this.offsetParent.offsetParent.scrollTop-2); z-index: 999;}
Så dersom du nå setter HeaderStyle sin CssClass til lockedHeader vil tittel linjen låses ved scrolling. Enkelt! På tilsvarende måte kan du også låse f.eks. venstre kolonne. Skulle ønske jeg viste om dette for noen år siden da jeg knotet med to tabeller og javascript for å få til samme effekt.

Hvem er jeg?

Marius Tennes KroghMitt navn er Marius Tennes Krogh og jeg har nå jobbet i ca. seks år med webutvikling. Det startet først med Active Server Pages, og senere gikk jeg over til ASP.NET.

Jeg har jobbet med .NET siden det ble lansert i 2002, og i løpet av de årene jeg har jobbet med .NET har jeg hatt flere A-HA opplevelser og vært borti mange problemstillinger som har måtte løses. Jeg tenkte derfor å begynne å dele disse erfaringene med andre.

Jeg er på ingen måte noen guru i .NET, de fleste av mine problemer finner jeg løsninger på ett eller annet sted på nettet. Men jeg tror alikevel at det kan være til nytte for andre. Hvor ofte jeg legger ut noe på denne bloggen får fremtiden vise.

Marius Tennes Krogh

Mitt profilbilde

Nick: makro

Fra: Ås

Født: 12. mars 1972

Mer...

februar 2006
ma ti on to fr
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
img