3

次のコードを使用して、ユーザーがグリッドビューでクリックした行を強調表示します (以前に選択した行の強調表示を解除します)。

    protected void PartListRowClicked(object sender, GridViewRowClickedEventArgs e)
    {
        pnewrow = (GridViewRow)PartList.Rows[e.Row.RowIndex];
        pnewrow.BackColor = Color.Blue;
        pnewrow.ForeColor = Color.White;
        if (poldrow != null)
        {
            poldrow.BackColor = Color.Empty;
            poldrow.ForeColor = Color.Black;
        }
        poldrow = pnewrow;
    }

ただし、poldrow オブジェクトはポストバック後に常に null にリセットされます (クリックするとポストバックが発生します)。ポストバック間で行インデックスを保存する方法はありますか? あるいは、この機能を実装するためのより良い方法はありますか?

ありがとう

4

3 に答える 3

2

もちろん、oldRow(index) をサーバーに格納することもできます。たとえば、ViewStateまたはSession varを使用できます。しかし、それはサーバーへの長い道のり であり、行の色/スタイルを変更するためだけに戻ります。したがって、サーバーでrowClickedイベントに注意する必要がない限り、JQueryを使用して行のスタイルを変更することをお勧めします?!

<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
<script type="text/javascript">
    var oldRow = null;
    var newRow = null;
    $(document).ready(function () {
        // gvProducts is my gridView
        $("#gvProducts tr:gt(0)").click(function () {
            oldRow = newRow;
            newRow = $(this);

            newRow.css("background-color", "blue");
            newRow.css("color", "white");

            if (oldRow != null) {
                oldRow.css("background-color", "transparent");
                oldRow.css("color", "black");
            }
        });
    });
</script>

このスクリプトを使用すると、クライアントにとどまり、クライアントはスタイルを設定するためだけにサーバーにポストバックする必要がなくなります!

于 2012-09-12T19:36:58.883 に答える
1

ViewStateまたはに値を格納できますSession

public int CurrentRowIndex
{
    get
    {
        return ViewState["rowindex"] != null ?
               int.Parse(ViewState["rowindex"]) :
               0;
    }

    set
    {
        ViewState["rowindex"] = value;
    }
}
于 2012-09-12T18:57:19.747 に答える
0

インデックスをセッション、ビューステート、または Cookie に保存するだけです。ポストバック後、その値を使用して、必要なものを取得します!

設定 :

Session["rowindex"]="the index";

得る :

string index=Session["rowindex"].ToString();
于 2012-09-12T18:59:29.707 に答える