0

ページ内のすべてのコントロールを反復しようとしています。このページには、いくつかの ajaxtoolkit:tabpanel を持つ ajaxtoolkit:tabcontainer が含まれています。次のように、これを再帰的に実行しようとしています。

protected override void AddedControl(Control control, int index)
{
   base.AddedControl(control, index);
   ParseControls(control);
}

public void ParseControls(Control control)
{
        foreach (Control myControl in control.Controls)
        {
            ParseControls(myControl);

            if(myControl.GetType().ToString().ToLower() == "AjaxControlToolkit.TabPanel".ToLower())
            {
                AjaxControlToolkit.TabPanel tabPanel = (AjaxControlToolkit.TabPanel)myControl;
                Response.Write("tabpanel id is:" + tabPanel.ID + " |tab panel no of controls:" + tabPanel.Controls.Count.ToString() + "<br />");
            }

        }
}

ここでの問題は、TabPanel.Controls.Count が常に 0 を返すため、TabPanel を見つけるたびにそのコントロール コレクションを反復処理できないことですが、aspx ページではテキスト ボックス、ラベルなどを追加しました。また、FindControl メソッドを使用して TabPanel 内の項目を調べてみましたが、役に立ちませんでした。

      HtmlTable tbl = (HtmlTable)tabPanel.FindControl("tblContent");

誰かが私が欠けているものを指摘できますか? ありがとうございました!

4

1 に答える 1

0

私は同じ問題に苦労しました。これが私の解決策でした。

それが何をするかを簡単に説明します。これにより、ページ上のすべてのコントロールがループされます。任意のタイプのコントロールを渡すことができます。関数へのページまたは単にタブコンテナ。次に、コントロールが TabPanel であるかどうかを確認します。最初に TabPanel に解析してから、コントロールにアクセスします。お役に立てれば

       private void IterateControls(Control ctrl)
    {
        foreach (Control item in ctrl.Controls)
        {
            if (item is AjaxControlToolkit.TabPanel)
            {
                TabPanel tp = item as TabPanel;
                foreach (Control tpControls in tp.Controls)
                {
                    IterateControls(tpControls);
                }
            }
            else
                if (item.Controls.Count > 1)
                {

                    IterateControls(item);
                }
                else
                {
                    if (item.GetType() == typeof(DropDownList))
                    {
                        DropDownList dl = item as DropDownList;
                       //do something  

                    }
                    else if (item.GetType() == typeof(TextBox))
                    {

                        TextBox txt = item as TextBox;
                        if (txt.ID == "testControlID")
                        {
                            //IT WORKS!! 
                        }
                        //do something  
                    }
                }
        }

    }

次に、このように関数を呼び出すことができます

    IterateControls(Page);
于 2013-08-22T06:14:23.787 に答える