早上好/下午好,
我有一个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";
}
}
}
但每次我运行时,第二行都会变色?!?!
任何帮助都将不胜感激。
答案 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