0

Gridview * BoundFields * をTemplateFields with Labelsに変更すると、重大なパフォーマンスの問題がありますか? (以下のコードの抜粋を参照してください)

コードの保守をより簡単にするために、グリッドビュー フィールドに関する多くの要件の変更により、上記の変更を実装する予定です。フィールドを再配置するだけであれば、コードの変更は少なくて済みます。

BoundFields を使用すると、セル インデックスのすべての発生を追跡するように細心の注意を払う必要があるため、エラーが発生しやすくなります。特に、どこからでもアクセスできる多くのフィールドを持つ Gridview の場合。

ヘルプ/アドバイスをいただければ幸いです。

前もって感謝します。

ラベル:

ページ上:

<asp:TemplateField HeaderText="Field1">
     <ItemTemplate>
         <asp:Label ID="lblField1" runat="server" Text='<%# Eval("Field1")%>' />
     </ItemTemplate>
</asp:TemplateField>

コード内:

Label lblField1 = row.FindControl("lblField1") as Label;
if (lblField1 != null) { string field1 = lblField1.Text; }

バウンドフィールド:

ページ上:

<asp:BoundField DataField="Field1" HeaderText="Field1" />

コード内:

string field1 = row.Cells[2].Text;
4

1 に答える 1

0

セル オブジェクトの代わりに hastable dataItem を使用する

dataitem("Field1")。その後、セルのインデックスについて心配する必要はありません。

編集:ページの読み込み時にグリッドを再バインドしない限り、表示されるため、操作するデータ項目がありません。

そうは言っても、私はこの主張を立証することはできませんが、テンプレート フィールドはおそらくよりプロセス集約的であると考えられるため、その余分な処理のためにオブジェクトへの参照を取得するため、テンプレート フィールドがニーズにより適していると思います。

基本的に、バインドされたフィールドはテーブル内のセルに解決され、ラベルは参照を持つスパンに解決されます。DOM が異なり、データへのアクセスも異なります。

そのため、ラベルを使用するとオーバーヘッドが増えますが、アクセスは簡単になります。

もちろん、数百のレコードをページングしていない限り、「重大な」パフォーマンスの問題があるとは言いません。その場合、バインドされたフィールドは、それほど多くの html を生成していないという理由だけでそれほど集中的ではないと推測します。

于 2012-11-20T21:15:48.020 に答える