Henris blogg

 

SQL: Oppdatere en tabell basert på en annen

Setter Eier for Hendelse lik HendelseEier i tabellen HendelseInformasjon.
 
Merk at at en HendelseInformasjonId i HendelseInformasjon kan inneholde mange relaterte poster i Hendelse.
Alle disse vil da bli oppdatert.
 
UPDATE    Hendelse
SET              Eier =
                          (SELECT     HendelseEier
                            FROM          HendelseInformasjon
                            WHERE      (Hendelse.HendelseInformasjonId = HendelseInformasjonId))
 
 
Struktur:
 

Comments [0]

SQL: Inserte flere poster samtidig

Her er en måte å inserte flere records i samme insert:
 
 
 
INSERT INTO [Database].[dbo].[StatusType]
           ([StatusId]
           ,[HendelseTypeId]
           ,[Status]
           ,[LogtilKode]
           ,[Velgbar]
           ,[XStatus])
SELECT
 15,1,'',1,0,'STARTSAK'
UNION ALL
SELECT
 15,2,'',1,0,'STARTSAK'
union all
SELECT
 15,3,'',1,0,'STARTSAK'
UNION ALL
SELECT
 15,4,'',1,0,'STARTSAK'
UNION ALL
SELECT
 15,5,'',1,0,'STARTSAK'
UNION ALL
SELECT
 15,6,'',1,0,'STARTSAK'
UNION ALL
 
 
 SELECT
  23,1,'Eierskifte',1,0,'EIERSKIFTE'
 UNION ALL
 SELECT
  23,2,'Eierskifte',1,0,'EIERSKIFTE'
 union all
 SELECT
  23,3,'Eierskifte',1,0,'EIERSKIFTE'
 UNION ALL
 SELECT
  23,4,'Eierskifte',1,0,'EIERSKIFTE'
 UNION ALL
 SELECT
  23,5,'Eierskifte',1,0,'EIERSKIFTE'
 UNION ALL
 SELECT
  23,6,'Eierskifte',1,0,'EIERSKIFTE'
 
union all
 
 SELECT
  13,1,'Ok/Lest',1,0,'UNDER_ARBEID'
 UNION ALL
 SELECT
  13,2,'Ok/Lest',1,0,'UNDER_ARBEID'
 union all
 SELECT
  13,3,'Ok/Lest',1,0,'UNDER_ARBEID'
 UNION ALL
 SELECT
  13,4,'Ok/Lest',1,0,'UNDER_ARBEID'
 UNION ALL
 SELECT
  13,5,'Ok/Lest',1,0,'UNDER_ARBEID'
 UNION ALL
 SELECT
  13,6,'Ok/Lest',1,0,'UNDER_ARBEID'
 
GO

Comments [0]

Generell funksjon for å eksportere en gridview til Excel

Store deler av denne koden er hentet fra denne bloggen: http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html
 
 
Eneste improve er at klasser, styles osv blir beholdt + mulgheten for å ta med et stylesheet ved exporten.
 
 
Og her kommer koden:
 
 
using System;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
/// <summary>
/// Util for å exportere Gridview til Excel
/// </summary>
public class GridViewExportUtil
{
 
    /// <summary>
    /// Exporter Gridview til Excel
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="gv"></param>
    public static void Export(string fileName, GridView gv)
    {
        Export(fileName, gv, "");
    }
 
    /// <summary>
    /// Exporterer GridView til Excel
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="gv"></param>
    /// <param name="styleSheet"></param>
    public static void Export(string fileName, GridView gv, string styleSheet)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader(
            "content-disposition", string.Format("attachment; filename={0}", fileName));
        HttpContext.Current.Response.ContentType = "application/ms-excel";
 
        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                Table tbl=new Table();
                TableRow rad=new TableRow();
                tbl.Controls.Add(rad);
                TableCell cell=new TableCell();
 
                if (gv.HeaderRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                }
 
               
                foreach (GridViewRow row in gv.Rows)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                }
 
               
                if (gv.FooterRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                }
 
                cell.Controls.Add(gv);
                rad.Controls.Add(cell);
                tbl.Controls.Add(rad);
 
                tbl.RenderControl(htw);
 
                // hvis stylesheet er spesifisert ta det med
                if (!String.IsNullOrEmpty(styleSheet))
                {
                    try
                    {
                        StreamReader sr = new StreamReader(HttpContext.Current.Server.MapPath(styleSheet));
 
                        string s = sr.ReadToEnd();
 
                        sr.Close();
 
                        HttpContext.Current.Response.Write("<HEAD><STYLE>");
 
                        HttpContext.Current.Response.Write(s.ToString());
 
                        HttpContext.Current.Response.Write("</STYLE></HEAD>");
                    }
                    catch { }
 
                }
 
 
 
                //  skriv htmlwriter til response
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }
 
 
 
 
 
    /// <summary>
    /// Erstatt kontroller med text
    /// </summary>
    /// <param name="control"></param>
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "Ja" : "Nei"));
            }
 
            if (current.HasControls())
            {
                GridViewExportUtil.PrepareControlForExport(current);
            }
        }
    }
}
 
 
 

Comments [0]

Attributt på Properties for å lagre i Viewstate

Denne koden definerer en attributt for enkelt å sette en property til å lagres i Viewstate på dene måten:
 
    [LagreIViewState]
    public bool VisPager
    {
        get;set;
    }
 
Denne propertyen vil nå bli lagret og lastet til/fra ViewState.
 
Hvis du ønsker en defaultverdi kan du også bruke det:
 
   [LagreIViewState(true)]
    public bool VisPager
    {
        get;set;
    }
 
Tilsvarende for en int:
 
  [LagreIViewState(15)]
    public int PageSize
    {
        get; set;
    }
 
og en streng:
 
  [LagreIViewState("Kunde ASC)]
    public string Sortering
    {
        get; set;
    }
 
 
 
For å få dette til må vi utvide Page litt:
 
(Samme kode kan brukes for UserControl hvis du vil overstyre den)

 
public class PageBase : PageBase
{
    /// <summary>
    /// Attributt for å kunne lagre propertier i viewstate på denne måten:
    /// [LagreIViewState] public type variabelnavn...
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    public class LagreIViewState : Attribute
    {
        object _DefaultVerdi = null;
        public LagreIViewState(object DefaultVerdi)
        {
            _DefaultVerdi = DefaultVerdi;
        }
        public LagreIViewState()
        {
           
 
        }
 
        public object DefaultVerdi
        {
            get { return _DefaultVerdi; }
        }
 
    }
 
 
 
    /// <summary>
    ///
    /// </summary>
    /// <param name="savedState"></param>
    protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);
        PropertyInfo[] properties = GetType().GetProperties();
        foreach (PropertyInfo property in properties)
        {
            object[] attributes = property.GetCustomAttributes(typeof(LagreIViewState), true);
            if (attributes.Length > 0)
            {
                if (ViewState[property.Name] != null)
                {
                    property.SetValue(this, ViewState[property.Name], null);
                }
              
            }
        }
    }
    protected override object SaveViewState()
    {
        PropertyInfo[] properties = GetType().GetProperties();
        foreach (PropertyInfo property in properties)
        {
            object[] attributes = property.GetCustomAttributes(typeof(LagreIViewState), true);
            if (attributes.Length > 0)
            {
                ViewState[property.Name] = property.GetValue(this, null);
            }
        }
        return base.SaveViewState();
    }
 
    private void SettDefaultProperties()
    {
 
        PropertyInfo[] properties = GetType().GetProperties();
        foreach (PropertyInfo property in properties)
        {
            object[] attributes = property.GetCustomAttributes(typeof(LagreIViewState), true);
            if (attributes.Length > 0)
            {
                LagreIViewState o = (LagreIViewState)attributes[0];
                    if (o.DefaultVerdi != null)
                        property.SetValue(this, o.DefaultVerdi, null);
               
            }
        }
 
    }
 
 
 
  void Page_Init(object sender, System.EventArgs e)
    {
        if (!Page.IsPostBack) SettDefaultProperties();
    }
 
 
 
 
 
I sidene du vil benytte dette:
 
public partial class Hendelseside : PageBase
{
    [LagreIViewState(true)]
    public bool VisPager
    {
        get;set;
    }
 

    [LagreIViewState(15)]
    public int PageSize
    {
        get;
        set;
    }

Comments [0]

c#: Konvertere fra Array til List

En webservice som returnerer en List<T> vil på andre siden dukke opp som en array av <T>
 
Enkleste måten å få den fine listen din tilbake til en List<t>
er metoden .AddRange() på listen din.
 
 
string[] arr=ws.GetSomething();
List<string> liste=new List<string>();
 
liste.AddRange(arr);
 
 
Eller bare direkte:
List<string> liste=new List<string>();
liste.AddRange(ws.GetSomething());
 
hvor ws.Getsomething returnerer en liste (som altså blir en array av string)
 
 
 
 

Comments [0]

XSL: Variabler og parametre

Sette en variabel basert på kriterier:
 
I vanlige programmeringsspråk ser man ofte lignede uttrykk:
 
if(a) b=2; else b=3;
 
I xsl er variabler konstante. (pun intented)
 
Dvs. har du satt en variabel får du ikke sette den på ny.
(dvs. den kan f.eks være inni et template og bli satt til en ny verdi ved hver gjennomkjøring, men da er variabelen "ny" ved hver gjennomkjøring)
 
For å sette en variabel basert på visse kriterier kunne man se for seg noe sånt som dette:
 
 
    <xsl:choose>
      <xsl:when test="$TypeProdukt='Trygghet'">
        <xsl:variable name="linkerspar">1
        </xsl:variable>
      </xsl:when>
      <xsl:when test="$TypeProdukt= 'Forening'">
        <xsl:variable name="linkerspar">2

        </xsl:variable>
      </xsl:when>
    </xsl:choose>
 
men dette vil bare gi to variable som har scope/levetid kun innenfor sin respektive When-setning.
$linkerspar vil ikke finnes når xsl:choose-setningen er ferdig
 
 
XSL-måten å gjøre det på er motsatt:
 
    <xsl:variable name="linkerspar">
     <xsl:choose>
      <xsl:when test="$TypeProdukt='Trygghet'">
1
      </xsl:when>
      <xsl:when test="$TypeProdukt= 'Forening'">2
      </xsl:when>
     </xsl:choose>
    </xsl:variable>
 
 
 
Sjekke verdi av en variabel:
 
over ser du også hvordan du kan sjekke verdien på variabelen:
 
<xsl:when test="$TypeProdukt='Trygghet'">
eller sjekke for null:
 
<xsl:if test="$image = null ">
 
 
Globale variabler/scope:
 
For at en variabel skal være global må den defineres som et barn/child av <xsl:stylesheet>
 
f.eks:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
    <xsl:variable name="TypeKontakt">
      <xsl:choose>
        <xsl:when test="//FILE/REC[@NAME=Otto'] or //FILE/REC[@NAME='Jenny']>Venn</xsl:when>
        <xsl:otherwise>Kontakt</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
 
    <xsl:template match="/">
...
 
 
 
Nå er variabelen $TypeKontakt tilgjengelig i hele stylesheetet.
 
Tilsvarende vil en variabel som blir deklarert i en xsl:choose kun være tilgjengelig innenfor den, i en xsl:template kun innenfor den osv.
 
 
 
Parametre:
 
 
Her er et eksempel på hvordan kalle et template med en parameter
koden viser en liste over linker/bokmerker på en side, og det bokmerket som er aktivt får en egen style, mens de andre blir vanlige linker:
 
     <xsl:call-template name="Linker">
         <xsl:with-param name="Aktiv">Dekninger</xsl:with-param>
        </xsl:call-template>
 
 
Templatet linker er så definert slik:
<xsl:template name="Linker">
    <xsl:param name="Aktiv">Person</xsl:param>
    ....
 
 
Variabelen $Aktiv er nå klar for bruk inni templaten
...<xsl:choose>
    <xsl:when test="@ID=$Aktiv">
osv.
 
 
 
 
Komplett XSL for denne funksjonen:
(merk at denne bruker funksjonen node-set som er en extension. Se forrige post for hvordan sette opp denne..)
 
 
 <xsl:template name="Linker">
    <xsl:param name="Aktiv">Person</xsl:param>
   
 

    <xsl:variable name="linkertrygghet">
      <link ID='Person'>Personopplysninger</link>
      <link ID='Dekninger'>Dekninger</link>
      <link ID='Begunstigelse'>Begunstigelse</link>
      <link ID='Pantsettelse' >Pantsettelse</link>
      <link ID='Innbetaling' >Innbetaling</link>
      <link ID='Avtalegiro' >Avtalegiro</link>
      <link ID='Raadgiver' >Rådgiver</link>
    </xsl:variable>
 

    <xsl:variable name="linkerforening">
      <link ID='Person'>Personopplysninger</link>
      <link ID='Innbetaling' >Innbetaling</link>
      <link ID='Avtalegiro' >Avtalegiro</link>
      <link ID='Raadgiver' >Rådgiver</link>
    </xsl:variable>
 
    <xsl:variable name="linkerspar">
      <link ID='Person'>Personopplysninger</link>
      <link ID='InnLiv'>Innbetaling</link>
      <link ID='UtLiv'>Utbetaling</link>
      <link ID='BegunstLiv'>Begunstiget</link>
      <link ID='Avtalegiro'>Avtalegiro</link>
      <link ID='Raadgiver'>Rådgiver</link>
    </xsl:variable>
 
 
 

    <xsl:choose>
      <xsl:when test="$TypeProdukt='Trygghet'">
        <xsl:call-template name='laglinker'>
          <xsl:with-param name='Aktiv' select='$Aktiv'></xsl:with-param>
          <xsl:with-param name='linker' select='$linkertrygghet'></xsl:with-param>
        </xsl:call-template>
      </xsl:when>
      <xsl:when test="$TypeProdukt= 'Forening'">
        <xsl:call-template name='laglinker'>
          <xsl:with-param name='Aktiv' select='$Aktiv'></xsl:with-param>
          <xsl:with-param name='linker' select='$linkerforening'></xsl:with-param>
        </xsl:call-template>
      </xsl:when>
      <xsl:when test="$TypeProdukt = 'Spar'">
        <xsl:call-template name='laglinker'>
          <xsl:with-param name='Aktiv' select='$Aktiv'></xsl:with-param>
          <xsl:with-param name='linker' select='$linkerspar'></xsl:with-param>
        </xsl:call-template>
      </xsl:when>
    </xsl:choose>
 
 
 
  </xsl:template>
 

  <!-- lag linker basert på liste over linker i param-->
  <xsl:template name="laglinker">
    <xsl:param name="Aktiv">Person</xsl:param>
    <xsl:param name="linker"></xsl:param>
 
    <xsl:for-each select="msxsl:node-set($linker)/link">
      <xsl:choose>
        <xsl:when test="@ID=$Aktiv">
          <span class="aktiv">
            <xsl:value-of select="."/>
          </span>
        </xsl:when>
        <xsl:otherwise>
          <a>
            <xsl:attribute name="href">
              #<xsl:value-of select="@ID" />
            </xsl:attribute>
            <xsl:value-of select="."/>
          </a>
 
        </xsl:otherwise>
      </xsl:choose>
 

    </xsl:for-each>
 
  </xsl:template>
 
 
 

Comments [0]

XSL: variable, arrays, node-set osv

xsl støtter i utganspunktet ikke arrays, men her er en løsning:

deklarer en variabel f.eks som dette:


    <xsl:variable name="linker">
      <link ID='Person'>Personopplysninger</link>
      <link ID='Dekninger'>Dekninger</link>
      <link ID='Begunstigelse'>Begunstigelse</link>
      <link ID='Pantsettelse' >Pantsettelse</link>
      <link ID='Innbetaling' >Innbetaling</link>
      <link ID='Avtalegiro' >Avtalegiro</link>
      <link ID='Raadgiver' >Rådgiver</link>
    </xsl:variable>

denne blir kalt et Tree fragment e.l og kan dessverre ikke brukes slik du ville tro:

    <xsl:for-each select="$linker">
            <gjør noe fornuftig for hver link...>

for å komme rundt dette må man bruke en funksjon som heter node-set($variabel)
denne er ikke innebygget i standard xsl, men må defineres som en extension-metode.
Der finnes forskjellige utgaver, MS har sin som defineres slik:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:msxsl="urn:schemas-microsoft-com:xslt">

nå har du tilgang til funksjonen under namespace msxml på denne måten:

<xsl:for-each select="msxsl:node-set($linker)/link">
          <a>
            <xsl:attribute name="href">
              #<xsl:value-of select="@ID" />
            </xsl:attribute>
            <xsl:value-of select="."/>
          </a>
 </xsl:for-each>

Her ser også hvordan du lager en link via xsl.
Du kan altså ikke bruke:

<a href="#<xsl:value-of select='@ID' />"><xsl:value-of select="."/></a>

som i alle fall jeg prøvde på..., men bruker attribute til å sette verdier på <a> elementet.

Det var vel det for denne gang :)

Mvh
Henri

 

Comments [1]

Sqlserver: Stored procedures: Returner flere verdier fra subquery

Dette er en utvidelse av en del av forrige post.

Her kjører vi selfjoin på en subquery for å kunne returnere flere verdier fra samme subquery:

 

 

CREATE PROCEDURE [dbo].[sp_ProduktlistingNy]

                @dato datetime = NULL,

                @leverandorid int = NULL

AS

BEGIN

 

IF @dato IS NULL SET @dato= getdate();

SELECT     TOP (100) PERCENT P.ProduktID , P.LeverandorID, P.Navn, P.Betalingsinformasjon,

                      P.KravOmEpostFaktura, P.KravOmEfaktura, P.KravOmAvtalegiro, P.Landsdekkende,

                      P.Inaktiv, T.Termin, TYP.ProduktType,

                      TYP.Kortnavn, PV1.KraftPris, PV1.TidspunktInnmelding

FROM         dbo.Produkter P

                INNER JOIN

                               dbo.ProduktTyper TYP ON P.ProduktTypeID = TYP.ProduktTypeID

                INNER JOIN

                               dbo.Terminer T ON P.TerminID = T.TerminID

                LEFT OUTER JOIN

                               dbo.Prisvarsler PV1 ON (select TOP(1) ProduktID from dbo.PrisVarsler PV Where PV.ProduktID=P.ProduktID AND PV.GjelderFraDato<=@dato ORDER BY PV.GjelderFraDato) = PV1.ProduktID

WHERE                 (P.LeverandorID = @LeverandorId OR @LeverandorID is null)

ORDER BY P.LeverandorID, TYP.Kortnavn

END

 

Comments [0]

Sqlserver: Stored procedures og valgfrie parametre

 

 

Valgfrie parametre:

Her kommer  en sqlprosedyre med to valgfrie parametre:
Begge blir satt til NULL i deklarasjonen:

                @dato datetime = NULL,
                @leverandorid int = NULL

 deretter blir @dato satt til dagens dato hvis den er null,
                BEGIN
                IF @dato IS NULL SET @dato= getdate();

mens @LeverandorID har et lite triks hvis den er tom:
                WHERE                 (dbo.Produkter.LeverandorID = @LeverandorId OR @LeverandorID is null)

 

Select i select

Annet interessant er en selectkolonne i select: husk paranteser rundt og gi den deretter et navn vha AS:

…, dbo.ProduktTyper.Kortnavn, (select TOP(1)KraftPris from dbo.PrisVarsler Where ProduktID=dbo.Produkter.ProduktID AND GjelderFraDato<=@dato ORDER BY GjelderFraDato) as GjeldendePris
FROM         dbo.Produkter ….

 

 

Dato fra sqlserver til PHP:

Hvordan konvertere en dato fra Sqlserver for bruk i PHP:
CONVERT(varchar, dbo.Produkter.Opprettet, 104) + ' ' + SUBSTRING(CONVERT(varchar, dbo.Produkter.Opprettet, 108), 1, 5) AS Opprettet,

 

 

Full listing av Stored procedure:

 

CREATE PROCEDURE [dbo].[sp_Produktlisting]

                @dato datetime = NULL,
                @leverandorid int = NULL
AS

BEGIN

IF @dato IS NULL SET @dato= getdate();

SELECT     TOP (100) PERCENT dbo.Produkter.ProduktID , dbo.Produkter.LeverandorID, dbo.Produkter.Navn,
dbo.Produkter.Betalingsinformasjon,dbo.Produkter.KravOmEpostFaktura, dbo.Produkter.KravOmEfaktura,
dbo.Produkter.KravOmAvtalegiro, dbo.Produkter.Landsdekkende,

     CONVERT(varchar, dbo.Produkter.Opprettet, 104) + ' ' + SUBSTRING(CONVERT(varchar,dbo.Produkter.Opprettet, 108), 1, 5) AS Opprettet,
dbo.Produkter.Inaktiv, CONVERT(varchar, dbo.Produkter.Oppdatert, 104) AS Oppdatert, dbo.Terminer.Termin, dbo.ProduktTyper.ProduktType,dbo.ProduktTyper.Kortnavn,

(select TOP(1)KraftPris from dbo.PrisVarsler Where ProduktID=dbo.Produkter.ProduktID AND GjelderFraDato<=@dato ORDER BY GjelderFraDato) as GjeldendePris

FROM         dbo.Produkter INNER JOIN

dbo.ProduktTyper ON dbo.Produkter.ProduktTypeID = dbo.ProduktTyper.ProduktTypeID INNER JOIN
dbo.Terminer ON dbo.Produkter.TerminID = dbo.Terminer.TerminID
WHERE                 (dbo.Produkter.LeverandorID = @LeverandorId OR @LeverandorID is null)
ORDER BY dbo.Produkter.LeverandorID, dbo.ProduktTyper.Kortnavn

 

 

Comments [0]

Vise sortering og hover på Gridview

Denne koden gjør følgende:
- Viser rad som er merket/pekeren er over.
- Viser kolonne som er sortert, både heading og celler
- viser sortert kolonne også ved Hover, med egen style for denne
 
 
 
.CSS
 
TR.GridHead A { DISPLAY: block; COLOR: #fff}
TH.SortAsc
{
 PADDING-RIGHT: 18px;
 PADDING-LEFT: 5px;
 BACKGROUND: url(../master/images/sort_asc.gif) #c48356 no-repeat right center
}
TH.SortDesc

 PADDING-RIGHT: 18px;
 PADDING-LEFT: 5px;
 BACKGROUND: url(../master/images/sort_desc.gif) #c48356 no-repeat right center
}
.SortertRad { BACKGROUND-COLOR:#efefef}
.SortertAltRad { BACKGROUND-COLOR:  #e3e3e3}
.SortertRadHover { BACKGROUND-COLOR: #c48356; color: White;}
.SortertAltRadHover { BACKGROUND-COLOR: #c48356; color: White;}
 
tr.oddline, td.oddline {
background-color:#fff;
}
tr.evenline, td.evenline {
background-color:#f2f2f2;
}
tr.evenlineHover
{
 background-color: #f4a376;
}
tr.oddlineHover
{
 background-color: #f4a376;
}
 
 
.ASCX
 
<script language="javascript">
 
    function setHover(tr)
    {
        if(tr.className.indexOf("Hover")>0)          
            tr.className=tr.className.substring(0,tr.className.indexOf('Hover'))
        else if(tr.className.length>0)
            tr.className+="Hover";
        var trs = tr.getElementsByTagName('TD');
        for(var i=0; i<trs.length; i++)
        {
            if(trs[i].className.indexOf("Hover")>0)          
                trs[i].className=trs[i].className.substring(0,trs[i].className.indexOf('Hover'))
        else if(trs[i].className.length>0)
            trs[i].className+="Hover";
           
    }
}
</script>
 
 
 
 
.CS
 
 
HentSortering og Kolonner[] er egne funksjoner/objekter vi har laget.
Man kan i stedet bruke gridview.SortExpression og gridview.SortDirection samt f.eks finne underliggende datafelt og indeks fra dette.
 
  protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
    {
 
        string sortfelt; string retning;
        HentSorterering(out sortfelt, out retning);
 

        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[kolonner[sortfelt].Indeks].CssClass =
                retning == "ASC" ? "SortAsc" : "SortDesc";
        }
        else if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[kolonner[sortfelt].Indeks].CssClass = e.Row.RowIndex % 2 == 0 ? "SortertRad" : "SortertAltRad";
 
            if (VisHoverRad)
            {
                e.Row.Attributes.Add("onmouseover", "this.style.cursor='hand';setHover(this);");
                e.Row.Attributes.Add("onmouseout", "setHover(this);");
            }
 
        }

Comments [0]