如何为asp:grid中的第一行着色

时间:2012-05-23 09:23:00

标签: c# asp.net

早上好/下午好,

我有一个ASP:grid,它显示我们当前使用的当前版本的条款和条件/使用网格中的第一行始终是我们当前使用的那个,我需要突出显示该行但我在尝试时遇到了麻烦突出它

继承人:asp:gridview

<asp:GridView runat="server" ID="grvTermsAndConditions" AutoGenerateColumns="false"
                    OnRowDataBound="grvTermsAndConditions_rowDataBound" Style="margin-bottom: 20px;">
                    <Columns>
                        <asp:TemplateField HeaderText="CurrentVersion">
                            <ItemTemplate>
                                <asp:Label ID="lblVersion" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CurrentVersion") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Added">
                            <ItemTemplate>
                                <asp:Label ID="lblDateAdded" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Added") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="CreatedBy">
                            <ItemTemplate>
                                <asp:Label ID="lblCreatedBy" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CreatedBy") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

<asp:GridView runat="server" ID="grvTermsAndConditions" AutoGenerateColumns="false" OnRowDataBound="grvTermsAndConditions_rowDataBound" Style="margin-bottom: 20px;"> <Columns> <asp:TemplateField HeaderText="CurrentVersion"> <ItemTemplate> <asp:Label ID="lblVersion" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CurrentVersion") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Added"> <ItemTemplate> <asp:Label ID="lblDateAdded" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Added") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="CreatedBy"> <ItemTemplate> <asp:Label ID="lblCreatedBy" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CreatedBy") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>

这是我的代码,我试图获得第一行,颜色为红色

protected void grvTermsAndConditions_rowDataBound(Object sender, GridViewRowEventArgs e)
        {

            for (int i = 0; i < grvTermsAndConditions.Rows.Count; ++i )
            {
                if (i == 0)
                {
                    e.Row.CssClass = "gvRowRed";
                    e.Row.Cells[0].CssClass = "white";
                    e.Row.Cells[1].CssClass = "white";

                }
            }
        }

但每次我运行时,第二行都会变色?!?!

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:4)

请注意,每个行都会执行RowDataBound事件 - 当您绑定每一行时,您正在执行的操作是遍历所有行。对性能非常不利。

试试这个:

protected void grvTermsAndConditions_rowDataBound(Object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowIndex == 0)
        {
            e.Row.CssClass = "gvRowRed";
            e.Row.Cells[0].CssClass = "white";
            e.Row.Cells[1].CssClass = "white";

        }
}

答案 1 :(得分:0)

试试这个

protected void grvTermsAndConditions_rowDataBound(Object sender, GridViewRowEventArgs e)
    {
             if(e.Row.RowType == DataControlRowType.DataRow) // Use this if condition otherwise exception is occurred
             {
                      if(e.RowIndex == 0)
                      {
                             e.Row.CssClass = "gvRowRed";
                e.Row.Cells[0].CssClass = "white";
                e.Row.Cells[1].CssClass = "white";
                      }
             }            
    }

答案 2 :(得分:0)

为了提高性能,我建议使用gridview DataBound事件,因为您只想更改一行:

protected void grvTermsAndConditions_DataBound(object sender, EventArgs e)
    {
        GridViewRow firstRow = grvTermsAndConditions.Rows[0];
        firstRow.CssClass = "gvRowRed";
        //etc.
    }

因此,您不必遍历所有可能对大型网格视图感兴趣的行。

答案 3 :(得分:-1)

Rows集合从零开始,因此第一行将是i == 0,而不是i == 1.虽然为每个添加的行遍历所有行似乎也是一个坏主意(因为你是在OnRowDataBound中做的。

我的一般建议是在CSS中使用:first-child伪类为第一行着色。 http://www.w3schools.com/cssref/sel_firstchild.asp