Avatar billede vint Nybegynder
18. oktober 2006 - 22:52 Der er 11 kommentarer og
1 løsning

Hover effekt på DataGrid

Hej.

Er det muligt med vb.net eller evt. javascript at få en hovereffekt på sine rækker i en DataGrid?
Avatar billede thanse21 Nybegynder
21. oktober 2006 - 00:34 #1
Avatar billede vint Nybegynder
21. oktober 2006 - 11:23 #2
HejØ/tak for svar

Jeg har prøvet hans kode, men jeg får en fejl:

Index and count must refer to a location within the string.

Exception Details: System.ArgumentOutOfRangeException: Index and count must refer to a location within the string.
Parameter name: count

---
  rowBackColor = gridGB.AlternatingRowStyle.BackColor.Name.Remove(1, 2)
Else
  rowBackColor = gridGB.RowStyle.BackColor.Name.Remove(1, 2)
End If
Avatar billede thanse21 Nybegynder
21. oktober 2006 - 11:53 #3
Det næsten helt sikkert din Remove-metode der bruger et forkert index.
Avatar billede vint Nybegynder
21. oktober 2006 - 13:04 #4
Hej.

Hvad vil det sige / hvad kan jeg gøre?
Avatar billede thanse21 Nybegynder
21. oktober 2006 - 23:47 #5
Altså, jeg har ikke prøvet eksemplet. Han siger det kun virker hvis du bruger hex-koder til at angive farverne. Derudover skal de angives i HTML-delen og IKKE i codebehind. Dvs at du skal angive farvekoderne således:
<AlternatingRowStyle BackColor="#FFCC66" />
<RowStyle BackColor="#FFFBD6" /> for dit grid.
Avatar billede vint Nybegynder
22. oktober 2006 - 00:20 #6
Hej igen.

Jeg må ærlig indrømme, at kæden hopper af for mig.

Jeg har omskrevet hans kode til vb.net og lagt den i code behind filen til eventen rowcreated.

Der kommer den omtalte fejl så.

Herefter har jeg tilføjeg de to linier til HTML-delen, som du har skrevet. Herefter kommer der ingen fejl, men der sker intet på min gridview ved mouse over.

Til sidst - modsiger han ikke lidt sig selv, når han siger der skal bruges Hex koder og han så alligevel skriver 'blue' mv. i koden.

please - teach me ;o)
Avatar billede sneakraid Nybegynder
22. oktober 2006 - 15:17 #7
Jeg har prøvet at følge hans eksempel og det virker fint. Og ja det er os lidt forkert hvis han siger man kun skal bruge hex koder for farver, fordi man kan sagtens bruge named colors, som f.eks. "Red, Green, Black, Blue" osv.

Min codebehind:

protected void MyGridView_RowCreated(object sender, GridViewRowEventArgs e)
{     
    string onmouseoverStyle = "this.style.backgroundColor='red'";
    string onmouseoutStyle = "this.style.backgroundColor='#@BackColor'";
   
    string rowBackColor = String.Empty;       

    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        if (e.Row.RowState == DataControlRowState.Alternate)
            rowBackColor = MyGridView.AlternatingRowStyle.BackColor.Name.Remove(0, 2);
        else rowBackColor =  MyGridView.RowStyle.BackColor.Name.Remove(0, 2);
   
       
        e.Row.Attributes.Add("onmouseover", onmouseoverStyle);
        e.Row.Attributes.Add("onmouseout", onmouseoutStyle.Replace("@BackColor",rowBackColor));                     
    }     
}

Min HTML:

<asp:GridView ID="MyGridView" runat="server" OnRowCreated="MyGridView_RowCreated" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False">
    <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
    <AlternatingRowStyle BackColor="#FFCC66" />
</asp:GridView>

Jeg har bare brugt en SqlDataSource og binded den til mit gridview, og det virker. Jeg tror fejlen var at du i Remove() brugte 1 som start index, hvilket jo faktisk ikke er det første tegn, men derimod nr. 2 tegn.
Avatar billede vint Nybegynder
22. oktober 2006 - 22:56 #8
Er det kun ved mig, at hovereffekten også fungerer på header-rækken - OG at den tilmed ikke går over på den normale farve igen?

Ellers fungerer det nu bortset fra det.
Avatar billede vint Nybegynder
22. oktober 2006 - 23:07 #9
Ja, og det gør det så alligevel ikke.

Den version, der virker har jeg i HTML-delen tilføjet dette.

<Columns>
  <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
  <asp:BoundField DataField="Navn" HeaderText="Navn" sortExpression="Forfatter" />
  <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
  <asp:BoundField DataField="Overskrift" HeaderText="Overskrift" SortExpression="Overskrift" />
  <asp:BoundField DataField="Tekst" HeaderText="Tekst" SortExpression="Tekst" />
  <asp:BoundField DataField="Dato" HeaderText="Dato" SortExpression="Dato" />
</Columns>

Men da jeg har stylet min gridview i min css har jeg i min ønskede version, der IKKE virker med hover effekt skrevet følgende:

<Columns>
  <asp:ImageField>
    <ItemStyle CssClass="AdminList_Data" />
    <HeaderStyle CssClass="AdminList_Header" Width="16px" />
  </asp:ImageField>
  <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" >
    <ItemStyle CssClass="AdminList_Data" Height="15px" />
    <HeaderStyle CssClass="AdminList_Header" Width="60px" />
  </asp:BoundField>
  <asp:BoundField DataField="Forfatter" HeaderText="Forfatter" SortExpression="Forfatter" >
    <ItemStyle CssClass="AdminList_Data" Height="15px" />
    <HeaderStyle CssClass="AdminList_Header" Width="140px" />
  </asp:BoundField>
  <asp:BoundField DataField="Overskrift" HeaderText="Overskrift" SortExpression="Overskrift">
    <ItemStyle CssClass="AdminList_Data" />
    <HeaderStyle CssClass="AdminList_Header" />
  </asp:BoundField>
  <asp:BoundField DataField="Dato" DataFormatString="{0:dd-MM-yyyy HH:mm}" HeaderText="Dato" SortExpression="Dato" HtmlEncode="False">
    <ItemStyle CssClass="AdminList_Data" />
    <HeaderStyle CssClass="AdminList_Header" Width="100px" />
  </asp:BoundField>
</Columns>

Altså tilføjet

<ItemStyle CssClass="AdminList_Data" /> og <HeaderStyle CssClass="AdminList_Header" Width="16px" /> til.

Og herefter fungerer projektet ikke med ønsket hover effekt.. Hmm. Livet er noget bøvl.

Skyldes det, at jeg i min kode skal have skrevet noget i retning af, at css-class skal slettes ved onmouseover og sættes på igen ved onmouseout eller lignende?
Avatar billede sneakraid Nybegynder
23. oktober 2006 - 08:35 #10
Hvordan ser din codebehind ud så? Så vi lige kan se hele dit projekt, i sammenhæng.
Avatar billede vint Nybegynder
23. oktober 2006 - 11:50 #11
Her følger min code-behind fil. (Men min code behind fil virker som sagt i mit første tilfælde - ikke i det andet)

Partial Class admin_gb
    Inherits System.Web.UI.Page


    Protected Sub gridGB_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridGB.RowCreated
        Dim onmouseoverStyle As String = "this.style.backgroundColor='#A4C5E6'"
        Dim onmouseoutStyle As String = "this.style.backgroundColor='#@BackColor'"

        Dim rowBackColor As String = String.Empty

        If (e.Row.RowType = DataControlRowType.DataRow) Then
            If (e.Row.RowState = DataControlRowState.Alternate) Then
                rowBackColor = gridGB.AlternatingRowStyle.BackColor.Name.Remove(0, 2)
            Else : rowBackColor = gridGB.RowStyle.BackColor.Name.Remove(0, 2)
            End If
        End If

        e.Row.Attributes.Add("onmouseover", onmouseoverStyle)
        e.Row.Attributes.Add("onmouseout", onmouseoutStyle.Replace("@BackColor", rowBackColor))
    End Sub

End Class
Avatar billede vint Nybegynder
25. september 2007 - 07:15 #12
Problemet blev ikke løst. Jeg lukker den selv.
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