1

大家早上好/下午好,

我有一个 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>

这是我试图获取第一行并且颜色为红色的代码

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

4 回答 4

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";

        }
}
于 2012-05-23T09:27:17.037 回答
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";
                      }
             }            
    }
于 2012-05-23T09:33:10.640 回答
0

为了性能起见,我建议您使用 gridview DataBound-event,因为您只想更改一行:

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

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

于 2012-05-23T10:27:03.867 回答
-1

Rows-collection 是从零开始的,所以第一行是 i == 0,而不是 i == 1。虽然循环遍历添加的每一行的所有行似乎也是一个坏主意(因为你是在 OnRowDataBound 中进行。

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

于 2012-05-23T09:28:16.703 回答