SelectedRowStyle不改变具有定义CSS样式的单元格的BgColor

时间:2009-07-22 09:56:37

标签: asp.net css gridview

我已经启用了选择GridView。 GridView中的某些列具有CssClass设置,设置其背景颜色。此外,还有GridView中定义的SelectedRowStyle。

问题是,在选择了行之后,它的背景颜色会根据SelectedRowStyle中的定义进行更改,但设置了自己的CssClass的列除外。它们的背景颜色保持不变,我希望所选行中的所有列具有相同的颜色(在SelectedRowStyle中定义)。

我正在使用VS2008和.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;
}

代码:

    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()));
    }
}

1 个答案:

答案 0 :(得分:0)

好吧,我解决了这个问题。在GridView的SelectedIndexChanging事件中,我循环遍历自定义颜色单元格,删除CSS类定义并在选择下一行后恢复它。这有点蛮力编程,老实说,它对我来说看起来很荒谬,但它确实有效。这是代码:

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保留当前所选行的索引,我在代码中将其用于其他目的,这里它只是派上用场。

无论如何,如果你知道更优雅的解决方案,我会很乐意尝试。