0

特定の列の値に応じてサブヘッダー (1 つまたは複数の行) を追加できるグリッドを取得したいと思います (データ ソースは、この列で並べ替えられてグループ化されます)。継承した GridView 内で、OnRowDataBind メソッドをオーバーライドします。OnRowDataBind の現在の呼び出しで列を考慮する値が以前の値と等しくない場合、特別なヘッダー行が現在の行の前に挿入されます。

Table tbl = this.Controls[0] as Table; //this - pointer to CustomGridView tbl.Controls.AddAt(rowIndex + add_counter + 1, NewSubHeaderRow); /*rowIndex - RowIndex of current row, add_counter - amount of already added SubHrader rows */

すべて正しく動作します。しかし、GridView がその状態を復元すると、ポストバックで問題が発生します。すべてのグループの最初の行とそのすべてのコントロール (つまり、動的に追加された各サブヘッダー行の後の最初の行) には、属性がありません。ただし、グループの 2 行目は、それ自体の属性と最初の行の属性の両方を保持します。

いくつかのヘルプは非常に便利です。GridView に行を追加する別の (そして正しい) 方法があるかもしれません。次に、チュートリアルまたは記事へのリンクを提供してください。

4

2 に答える 2

0

ワカスに感謝。これが私の決定です。CreateChild(datasource, isBinding) をオーバーライドし、行のインデックスを配置するリストを作成します。その前にサブヘッダー行を追加する必要があります。SaveViewState で、このリストを封印されたオブジェクトに追加します。Load ViewState で、このリストをロードし、null でない場合は、保存されたインデックスによってサブヘッダー行を作成します。もっと簡単で自然な方法があるかもしれません。しかし、それは私から安全に隠されています )))

于 2011-09-16T08:14:19.130 に答える
0

ポストバック フレームワークにはそのようなコントロールに関する情報がないため、動的コントロールはポストバックで消えます。これらの動的コントロールを追跡し、ポストバック後に再作成するのはプログラマーの責任です...

ポストバックで動的コントロールを再作成するには、次の投稿を参照してください: FAQ: ポストバックで動的コントロールが消えるのはなぜですか?

于 2011-07-27T09:29:46.353 に答える