1

GridViewのアイテムにカスタムネーミングコンテナを実装する方法についての情報を探しています。私の問題は、曜日ごとにセルを持つGridViewがあり、各セルに同じまたは類似のコントロールが含まれることです。同じコントロールの場合は、「lblPersonName」のように、すべて同じ名前を付けると便利です。

ただし、これを行うと、行内に重複するIDを持つコントロールがあると文句を言うため、FindControl()を使用できません。問題の根本は、GridViewのコントロールの名前付けコンテナーがテーブルのセル(DataControlFieldCellなど)ではなく、GridViewRowであるということです。

これを行う方法があるかどうかはわかりませんが、セルが名前付けコンテナーになるようにデフォルトの名前付けコンテナーを交換できると便利です。そうすれば同じコントロール名を使用できます。

確かに、このためのASPXは少し大きくなり始めています。私は、ASP.NETMVCでプロジェクトを開始したかったのにと思い始めています。

いずれにせよ、このようなコントロールを使用してGridViewを実装する方法に関しては、他の選択肢を受け入れることができます。この時点で、単純な古いテーブルを使用してコントロールを動的に追加する方がクリーンな場合があります...

明確にするために:-各列はItemTemplateで定義され、コントロールはItemTemplate内にあります。-現在それを機能させる唯一の方法は、「lblPersonNameOne」、「lblPersonNameTwo」などを使用することです。

4

2 に答える 2

1

実際、それはかなり簡単なように思えます...私が今実験しているのは、asp:Panel から継承し、INamingContainer を実装する顧客サーバー コントロールを作成したことです。これを実装すると、コントロールの ID が子コントロールの Unique ID ストリームに自動的に挿入されます。

そのため、同じ ID (動的または宣言のいずれか) を持つ各テンプレートからコントロールを追加すると、独自の ID が取得されます。次に、行ではなくセル自体で FindControl を使用するだけで、検索された ID + 一意の ID アドオンを持つコントロールが見つかります。

上記のソリューションは機能しますが、INamingContainer を実装していると思われる単純な古い ascx ユーザー コントロール内に同じ名前のコントロールをすべて配置するだけで、同じように簡単でクリーンな場合があります。その後、通常どおり使用できます。ユーザー コントロールを使用することの唯一の欠点は、親ページのデータ ソースに簡単にデータ バインドできないことなどです。もちろん、親を通過することは可能ですが、宣言的ではありません。

于 2009-08-27T18:16:46.000 に答える
0

各列を TemplateField にして、テンプレート内でコントロールを宣言するとどうなるでしょうか。このように、各コントロールには一意の識別子が必要です。

于 2009-08-27T17:33:20.737 に答える