代码之家  ›  专栏  ›  技术社区  ›  Igor Drincic

SelectedRowStyle不使用已定义的CSS样式更改单元格的bgColor

  •  0
  • Igor Drincic  · 技术社区  · 17 年前

    我已经启用了网格视图选择。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 回复  |  直到 17 年前
        1
  •  0
  •   Igor Drincic    17 年前

    嗯,我解决了这个问题。在GridView i的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保存当前所选行的索引,我将其用于代码中的其他用途,这里它只是很方便。

    不管怎样,如果你知道更优雅的解决方案,我很乐意尝试。

    推荐文章