2009-07-22 5 views
0

J'ai GridView avec la sélection activée. Certaines colonnes dans GridView ont CssClass ensemble, définissant leur couleur de fond. En outre, SelectedRowStyle est défini dans GridView.SelectedRowStyle ne change pas BgColor de cellules avec le style CSS défini

Problème: après sélection de la ligne, sa couleur d'arrière-plan est modifiée comme défini dans SelectedRowStyle, à l'exception des colonnes ayant son propre ensemble CssClass. Leur couleur d'arrière-plan reste inchangée et j'aimerais que toutes les colonnes de la ligne sélectionnée aient la même couleur (définie dans SelectedRowStyle). Je utilise VS2008 et .NET Framework 3.5.

GridView:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
OnRowDataBound="GridView1_RowDataBound" AllowPaging="True" PageSize="50" CssClass="gv" 
OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnPageIndexChanged="GridView1_PageIndexChanged" 
DataKeyNames="Name" RowStyle-Wrap="False"> 
<RowStyle Font-Names="Calibri" Font-Size="Small" BackColor="White" ForeColor="#333333" /> 
<SelectedRowStyle BackColor="#336699" Font-Bold="True" ForeColor="White" /> 
<Columns> 
    <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
    <asp:BoundField DataField="Model" HeaderText="Model" SortExpression="Model" /> 
    <asp:BoundField DataField="Qty" HeaderText="Qty" SortExpression="Qty" /> 
    <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
    <asp:BoundField DataField="Level" HeaderText="Level" SortExpression="Level" ItemStyle-CssClass="bglightred" /> 
    <asp:BoundField DataField="Log" HeaderText="Log" SortExpression="Log" ItemStyle-CssClass="bglightred" /> 
</Columns> 

CSS:

.gv td.bglightred 
{ 
    background-color: #FF8080; 
} 

.gv tr:hover td 
{ 
    background-color: #CCCCCC;cursor: default; 
} 

code:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(GridView1, "Select$" + e.Row.RowIndex.ToString())); 
    } 
} 

Répondre

0

Eh bien, je l'ai résolu ce problème. Dans l'événement SelectedIndexChanging de GridView, je parcours des cellules colorées personnalisées, supprime la définition de classe CSS et la restaure après la sélection de la ligne suivante. C'est un peu un programme de force brute et, honnêtement, cela me semble ridicule, mais ça fonctionne. Voici le code:

protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { 
    int i = 0; 
    for (i = 4; i <= 5; i++) 
    { 
     GridView1.Rows[e.NewSelectedIndex].Cells[i].CssClass 
= null; 
    } 
    if (Session["LO_Index"] != null) 
    { 
     if (Session["LO_Index"].ToString() != "-1") 
     { 
      int index = Convert.ToInt32(Session["LO_Index"].ToString()); 
      for (i = 4; i <= 5; i++) 
      { 
       GridView1.Rows[index].Cells[i].CssClass 
= "bglightred"; 
      } 
     } 
    } } 

LO_Index conserve l'index de la ligne actuellement sélectionnée, je l'ai utilisé à d'autres fins dans le code et ici, il vient à portée de main.

De toute façon, si vous connaissez une solution plus élégante, je serais heureux de l'essayer.

Questions connexes