1

次の 2 つのスレッド: C#.NET でコントロールの配列を作成するにはどうすればよいですか? UpdatePanel 内のコントロールにアクセスできない

私は現在これを持っています:

ControlCollection[] currentControlsInUpdatePanel = new ControlCollection[upForm.Controls.Count];
foreach (Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls)
{
    currentControlsInUpdatePanel.
}

currentControlsInUpdatePanel には add または insert メソッドがありません。私が投稿した最初のリンクで、そのユーザーが自分のコレクションに追加できるのはなぜですか。これが私がやりたいことです。upForm 更新パネルですべてのコントロールを見つけます。しかし、それをコントロールのコレクションに追加する方法がわかりません。

4

3 に答える 3

0

このコードは意味がないと思います。ControlCollection オブジェクトの配列を作成し、そこに Control オブジェクトを格納しようとしています。さらに、 currentControlsInUpdatePanel オブジェクトは配列であるため、そのオブジェクトで使用できる Add() メソッドはありません。

Add() メソッドを使用する場合は、currentControlsInUpdatePanel を List オブジェクトとして作成してみてください。

例:

List<Control> currentControlsInUpdatePanel = new List<Control>();
foreach(Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls)
{
    currentControlsInUpdatePanel.Add(ctl);
}

引き続き配列を使用して Control オブジェクトを格納する場合は、インデックス値を使用してオブジェクトを配列に設定する必要があります。

例:

Control[] currentControlsInUpdatePanel = new Control[((UpdatePanel)upForm).ContentTemplateContainer.Controls.Count];
for(int i = 0; i < upForm.Controls.Count; i++)
{
    currentControlsInUpdatePanel[i] = ((UpdatePanel)upForm).ContentTemplateContainer.Controls[i];
}
于 2013-03-31T18:14:25.903 に答える
0

使ってみて

ControlCollection collection = ((UpdatePanel)upForm).ContentTemplateContainer.Controls;

これにより、そのコントロール コレクション内のすべてのコントロールが得られます。そこから CopyTo を使用して、必要な配列にコピーできます。

Control[] controls = new Control[collection.Length];
collection.CopyTo(controls , 0);
于 2013-03-31T18:14:48.923 に答える
0

UpdatePanel子コントロール コレクションは、1 つの子コントロール (そのテンプレート コンテナー) のみを含む特別なコレクションです。のすべての子コントロール( や など)を含むのはそのコントロールです。UpdatePanelGridViewButton

質問にリンクされている他の質問に記載されているように、子コントロール ツリーを再帰的にたどるのが最善の方法です。次に、コントロールを追加する必要がある場所を見つけたらControls.Add()、その場所を呼び出します。

私の提案は別のアプローチです:<asp:PlaceHolder>コントロールを に配置し、UpdatePanelそれに名前を付けて、それにコントロールを追加します。自体のコントロール コレクションにアクセスすることに特に利点はありません。また、コントロールのUpdatePanel実装の詳細を掘り下げる必要もありません (変更される可能性は低いですが、コードが読みにくくなる可能性があります)。

于 2013-03-31T18:12:53.340 に答える