0

クラス「statuss」のドロップダウンリストが100個あるとします。クラス「statuss」を持つすべてのWebコントロールを、1つずつ行うのではなく、同じデータソースにバインドするにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

2

すべてのコントロールは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が必要なことに興味がありますが、これはユーザーフレンドリーですか?

于 2012-12-09T23:43:04.977 に答える
1

ページの読み込み時に、フォームのコントロールをループして、必要に応じてクラスプロパティに基づいて、ドロップダウンリストのデータソースプロパティを目的のソースに動的に設定できます。

于 2012-12-09T23:39:12.993 に答える
1

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);
            }
        }
    }
于 2012-12-10T00:23:28.810 に答える