0

ずっと前に亡くなった人からクレイジーなコードを受け継いでいます。彼は単一のカスタム コントロールを実装して、大まかに関連付けられた多数のクエリを実装しました。

コントロールには一連のさまざまなパネルがあり、すべてが Visible='false' に設定されて、さまざまなフィルター入力のセットが反映されます。次に、結果用の単一の GridView があります。GridView には<asp:TemplateFields Visible='false'>、実行したいすべてのさまざまなクエリから返されるすべての可能な列のスーパーセットがあります。

コントロールのコード ビハインドは、フィルター パネルと現時点で必要な特定のクエリの列の Visible='true' を反転する init で実行されます。

<asp:TemplateField Visible="false">さらに複雑なことに、内部の <ItemTemplate> のビルドが停止されないことに気付きました。そのため、彼のコントロールは、表示されることのないあらゆる種類の余分な作業を行っています。

一例を挙げると:

 <asp:TemplateField HeaderText="Expiration Date" SortExpression="ExpirationDate" Visible="false"><br />
      <itemtemplate><br />
          <asp:HyperLink runat="server" ID="FormLink" Target="_blank" NavigateURL="<%# CreateFormLink() %>" Text='<%# DateUtil.getFormattedDate(Eval("ExpireDate")) %>' ><br />                
          </asp:HyperLink><br />
      </itemtemplate><br />
 </asp:TemplateField><br />

CreateFormLink()Visible が false であっても、コード ビハインド メソッドが呼び出されます...

以前に爆発しなかった唯一の理由は、メソッドが StringBuilder を使用して href をつなぎ合わせ、StringBuilder.Append(Eval("foo"))爆発しなかったことです。

StringBuilder の使用を連結に置き換えてメモリ効率を高めようとしましたが、列が現在の結果セットにないときにブームになりました。

Visible='false'(表示を停止しても)作業の実行を停止していないため、これを行うためのより標準的な方法はありますか? それとも最初からやり直すべきですか?

4

1 に答える 1

0

ItemDataBoundイベントに表示/非表示ロジックを実装することができます。

そうする場合、あなたはの呼び出しを完全に制御できますCreateFormLink()

于 2012-09-12T00:18:26.277 に答える