1

RowDataBound イベント中に別の行にある要素にアクセスする方法はありますか?

public void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // how to compare e.Row with row above or row below?
}
4

2 に答える 2

1

ぼんやりした記憶から、そこからGridViewの の配列を参照Rowして、それらを反復することができます。e の位置を取得して上の行にアクセスできるはずですが、1 行の再バインド ショットでない限り、それまでにデータバインドされていないため、下の行についてはわかりません。

于 2011-11-30T05:03:46.463 に答える
1

あなたができると思うことの1つは...

foreach (GridViewRow gvrow in GridView1)
{
    //loop through gridview's rows and find the row you're looking for
}

RowDataBound は、データ ソースにあるのと同じ順序で行を追加すると考えています。したがって、DataTable に 100 レコードがあり、その DataTable を GridView にバインドすると、RowDataBound は行ごとに 100 回呼び出されます。それらは DataTable に存在します。したがって、RowDataBound を使用して e.Row を上の行または下の行と比較することについて言及しましたが、それらが連続して入ってくる場合、下に行はありません。これは以前はあまり考えたことがありませんでしたが、RowDataBound がこのように機能することをブレークポイントでテストしたときのことを思い出しました。

そのようなものを機能させることができず、それがきれいではなく、より良い答えが得られなくてもこれを行う必要がある場合は、データバインドされた DataTable のコピーまたはデータのソースが入っているものは何でも保存できますViewState["myDataTable"] のような ViewState または Session 変数。その後、RowDataBound イベントで DataTable を取得し、e.Row で表される行の上下の行を確認できます (行を識別するための ID などのカーソルがある場合)。これにより、RowDataBound によって GridView に追加される次の行を確認できます。これは、DataTable の次の行 (既に存在し、表示可能) になるためです。

ただし、大規模な作業を行っている場合は、このすべてのループが面倒になる可能性があると思います。

于 2011-11-30T06:11:36.847 に答える