2

行の色が交互に変わる Gridview があり、その行のどこかをクリックしたときに行を強調表示したいと考えています。残念ながら、私が見つけて使用しているコードは、以前にクリックした行に暗い色合いを適用します。たとえば、4 行のグリッドビューの場合、2 と 4 は銀色にシェーディングされ、他の 2 つは白になります。行 1 をクリックしてから行 4 をクリックすると、行 1 が銀色になります。これは、他の行をクリックした場合にも発生します。これが私のコードです:

protected void CCAGridView_OnRowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
            e.Row.Attributes.Add("onclick", "HilightRow(this)");
    }

<asp:GridView ID="GridView" runat="server"  HeaderStyle-Width="200" HeaderStyle-BackColor="#2B6292" HeaderStyle-ForeColor="White" 
    AllowSorting="true" AllowPaging="true" Width="600" AutoGenerateColumns="False" OnRowCreated="GridView_OnRowCreated" 
    DataKeyNames="Id" AlternatingRowStyle-BackColor="Silver" BorderColor="#2B6292" BorderWidth="1" BorderStyle="solid">
        <Columns>
         ...
        </Columns>
    </asp:GridView>

どんな助けでも大歓迎です。ありがとう。

また、サーバー側で強調表示されている行を見つけるのを手伝ってくれる人はいますか? まるでセレクト。

4

1 に答える 1

0

主キーがわかっていると仮定して、選択した行を見つける方法をお手伝いできます。RowDataBound イベントで、DataItem を取得 (実際の型にキャスト) し、探している値と比較 (強調表示) できます。これを機能させるには、alternatingRowSTyle をオフにする必要がありました。それについてはあまり知りません。

protected void Page_Load(object sender, EventArgs e) { GridViewCompany.AlternatingRowStyle.Reset(); GridViewCompany.SelectedRowStyle.Reset(); }

    protected void GridViewCompany_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        int selectedCompanId = Convert.ToInt32(StateService.I.Get(CookieIdType.CompanySelected));
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            var userResult = e.Row.DataItem as CompanyResult;
            if (userResult != null)
            {
                if (userResult.Id == selectedCompanId)
                {
                    e.Row.BackColor = Color.LightGray;
                }
            }
        }
    }
于 2009-04-01T19:29:45.217 に答える