1

カスタム サーバー コントロール (GridView から継承) を作成しました。

このページでは、GridView は DataSet に DataBound されているため、設計時には GridView にどの列が存在するかわかりません。

今、私がやりたいことは、GridView ヘッダー行のすべてのセルにテキスト ボックスを追加することです。これらのテキスト ボックスは、列のフィルタリングを制御します。(テキスト ボックスは、GridView の OnRowCreated メソッドを使用して追加されます)。

これまでのところ、テキストボックスが表示され、フィルタリングが機能しています。

問題は、すべてのポストバックの後、テキスト ボックスの Text 値が失われることです。私の実験から、これはページ/コントロールのライフサイクルでテキストボックスを追加するのが遅すぎるためのようです。

ライフサイクル (GridView の OnInit など) の早い段階でテキスト ボックスを作成して追加する必要があるが、テキスト ボックスの追加はライフサイクルの後半で取得される情報に依存する、この種の問題にどのように対処しますか?

4

3 に答える 3

1

値を ViewState に保存し、ポストバックで読み戻して (テキスト ボックスを再入力して) みませんか?

于 2008-11-26T02:21:18.053 に答える
0

テキストボックスの値について心配する必要はありません。IDと作成時だけです。同じ数のテキストボックスとそれぞれの(一意の(!))IDをページに作成して「提供」する限り、制御状態(...うーん...またはおそらくビューステート)が残りを処理します。

これを行うには、Page_InitとPage_Loadの両方を使用できます... Page_Initは多少推奨されますが、ニーズによって異なります。

于 2008-11-26T02:51:34.293 に答える
0

役に立つページがあります: http://msdn.microsoft.com/en-us/library/ms178472.aspx具体的には、 Pre_Initイベントを 使用して yout コントロールを作成する必要があることを示しています。

PreInit : このイベントは次の目的で使用します。

  • IsPostBack プロパティをチェックして、ページが初めて処理されるかどうかを判断します。
  • ダイナミック コントロールを作成または再作成します
  • マスター ページを動的に設定します。
  • Theme プロパティを動的に設定します。
  • プロファイル プロパティ値の読み取りまたは設定。
于 2009-02-19T20:05:47.197 に答える