クラス「statuss」のドロップダウンリストが100個あるとします。クラス「statuss」を持つすべてのWebコントロールを、1つずつ行うのではなく、同じデータソースにバインドするにはどうすればよいですか?
前もって感謝します!
クラス「statuss」のドロップダウンリストが100個あるとします。クラス「statuss」を持つすべてのWebコントロールを、1つずつ行うのではなく、同じデータソースにバインドするにはどうすればよいですか?
前もって感謝します!
すべてのコントロールはPage.Controlsにあり、それに応じて繰り返すことができます。
private void Page_Load(object sender, System.EventArgs e)
{
LoopDropDownLists(Page.Controls);
}
private void LoopDropDownLists(ControlCollection controlCollection)
{
foreach(Control control in controlCollection)
{
if(control is DropDownList)
{
((DropDownList)control).DataSource = //Set datasource here!
}
if(control.Controls != null)
{
LoopDropDownLists(control.Controls);
}
}
}
ただし、100個のDropDownListが必要なことに興味がありますが、これはユーザーフレンドリーですか?
ページの読み込み時に、フォームのコントロールをループして、必要に応じてクラスプロパティに基づいて、ドロップダウンリストのデータソースプロパティを目的のソースに動的に設定できます。
m.edmondsonsの回答に追加:
/// <summary>
/// Bind DropDown Lists with a cetain CSS Class
/// </summary>
/// <param name="control">Parent Control Containing Dropdown Lists</param>
/// <param name="cssClass">Class that determines binding</param>
/// <param name="tableToBind">Data Source</param>
public void FindAndBindControlsRecursive(Control control, string cssClass, DataTable tableToBind)
{
foreach (Control childControl in control.Controls)
{
if (childControl.GetType() == typeof(DropDownList))
{
DropDownList dd = (DropDownList)childControl;
//Check CSS class
if (dd.CssClass.IndexOf(cssClass) > -1)
{
dd.DataSource = tableToBind;
//Set DataFields & TextFields
dd.DataBind();
}
}
else
{
FindAndBindControlsRecursive(childControl, cssClass, tableToBind);
}
}
}