1

おはよう/午後の皆さん

現在使用している利用規約の現在のバージョンを表示するASP:グリッドがあります/グリッドの最初の行を使用しているのは常に現在使用しているものであり、その行を強調表示する必要がありますが、強調表示しようとすると問題が発生します

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

                }
            }
        }

しかし、これを実行するたびに、2行目が色付きます?!?!

どんな助けでも大歓迎です。

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

パフォーマンスのために、1 行だけを変更したいので、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 は 0 から始まるため、最初の行は i == 1 ではなく i == 0 になります。ただし、追加されるすべての行のすべての行をループするのも悪い考えのように思えます ( OnRowDataBound でそれを行います。

ここでの一般的な推奨事項は、CSS で :first-child 疑似クラスを使用して最初の行に色を付けることです。http://www.w3schools.com/cssref/sel_firstchild.asp

于 2012-05-23T09:28:16.703 に答える