で
おかげで、これは同様に、サーバーコントロールである必要がありますブラウザに送信されます。一方、サーバーコントロールはコードビハインドとやりとりできる実際の.NETクラスです。
コンテナのControlsコレクションを検索するか、ページを再帰的に検索しても、IDなしでこのコントロールのハンドルを取得できます。コントロールのコレクションを再帰的に検索することから始めましょう。
コントロールコレクションは、特定のコントロールの子コントロールであるの即時を参照しています。またはページの直下の子コントロール。これらのコントロールには、の子コントロールがあります。これはメモリ内のツリーを表します。ここ
は、与えられたコントロールからツリーを下に再帰的及びIDの制御を見つけるための方法である:
private Control FindControlRecursive(Control control, string id)
{
Control returnControl = control.FindControl(id);
if (returnControl == null)
{
foreach (Control child in control.Controls)
{
returnControl = child.FindControlRecursive(id);
if (returnControl != null && returnControl.ID == id)
{
return returnControl;
}
}
}
return returnControl;
}
(この回答の範囲を超え、これはextension methodとしてより良い行われます)。
がそのID以外のものによる制御を見つけるには、タイプ別に検索できます。これは、一般的に非常に良いアイデアではないことを
if(someControl is System.Web.UI.WebControls.Table)
注意。この方法でコントロールを検索しなければならない場合は、大きなパターンではありません。コントロールにIDが必要です。コードで作成されているため、IDを参照する必要があります。
しかし、再帰的にタイプを検索する方法を修正することは簡単です:
private Control FindTable(Control startFrom)
{
foreach(Control child in startFrom.Controls)
{
if(child is System.Web.UI.WebControls.Table)
{
return child;
}
else
{
return FindTable(child);
}
}
return null;
}
ます。また、この方法の一般的な形式を持つことができます:
private Control FindControl<T>(Control startFrom)
{
foreach(Control child in startFrom.Controls)
{
if(child.GetType().IsAssignableFrom(typeof(T)))
{
return child;
}
else
{
return FindControl<T>(child);
}
}
return null;
}
あなたは間違いありませんSystem.Windows.Formsをインクルードしたい場合は、単にWinFormsアプリケーションのすべてのコードが含まれている必要があります。そのため、Visual StudioではWebプロジェクトには含まれていません。あなたはそれを必要としません。 System.Web.UIにはWebコントロールのためのすべてがあります。
私は本当に理解していないと思います - ページライフサイクルのどの部分で、クライアントサイドにロードされたDOMのリクエストサーバー側を作成するのですか? –
データセットは、一度に読み込むには大きすぎるツリーに表示されるため、ユーザーが展開するとすぐに各ノードを読み込みます。 – Praesagus