Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SelectedRowStyle不更改已定义CSS样式的单元格的颜色_Asp.net_Css_Gridview - Fatal编程技术网

Asp.net SelectedRowStyle不更改已定义CSS样式的单元格的颜色

Asp.net SelectedRowStyle不更改已定义CSS样式的单元格的颜色,asp.net,css,gridview,Asp.net,Css,Gridview,我已经启用了选择的GridView。GridView中的某些列设置了CssClass,设置了它们的背景色。此外,GridView中还定义了SelectedRowStyle 问题是,在选择行之后,它的背景颜色将按照SelectedRowStyle中的定义进行更改,但具有自己的CssClass集的列除外。它们的背景色保持不变,我希望所选行中的所有列在SelectedRowStyle中定义相同的颜色 我正在使用VS2008和.NETFramework3.5 GridView: <asp:Grid

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

问题是,在选择行之后,它的背景颜色将按照SelectedRowStyle中的定义进行更改,但具有自己的CssClass集的列除外。它们的背景色保持不变,我希望所选行中的所有列在SelectedRowStyle中定义相同的颜色

我正在使用VS2008和.NETFramework3.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>
代码:


我解决了这个问题。在GridView的SelectedIndexChanged事件中,我通过自定义彩色单元格循环,删除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_索引保留了当前选定行的索引,我在代码中将其用于其他目的,而在这里它就派上了用场

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

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