分かりやすく、使いやすく。

画面内の全ての項目を取得する方法

スポンサーリンク

ASP.NET(C#) で画面内の全ての項目(WebControl)を取得するメソッドは無いので、自分で処理を記述する必要があります。

次のサンプルコードは、引数に渡されたコントロール配下にある全てのコントロール(WebControl)を取得します。画面内の全ての項目を取得したい場合は、Page を引数に指定します。

C#(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        //引数に渡したControl内にあるWebControlを再帰的に検索して全てListに
        //格納して返します。
        //ページ内の全項目を取得したい場合はPageを引数に渡します。
        protected List<WebControl> GetAllWebControl(Control parent)
        {
            var controls = new List<WebControl>();
 
            foreach (Control child in parent.Controls)
            {
                controls.AddRange(GetAllWebControl(child));
            }
 
            if (parent is WebControl)
            {
                //WebControlとそのサブクラスのみListに追加。
                controls.Add((WebControl)parent);
            }
 
            return controls;
        } 

上記の使用例は次の通りです。次のサンプルコードでは、 Page 内にある全ての WebControl()を取得します。

まずは画面のサンプルコードです。

aspxファイル(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
    <asp:Panel ID="panel1" runat="server">
        <asp:Panel ID="panel2" runat="server">
            <asp:TextBox ID="text1" runat="server"/>
            <asp:TextBox ID="text2" runat="server"/>
        </asp:Panel>
        <asp:Panel ID="panel3" runat="server">
            <asp:TextBox ID="text3" runat="server"/>
        </asp:Panel>
 
        <asp:Label ID="label1" runat="server" />
    </asp:Panel>
    
    <asp:Button ID="button1" runat="server" OnClick="Button1_Click" /> 

次に全ての項目を取得するサンプルコードです。

C#(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    protected void Button1_Click(object sender, EventArgs e)
    {
        //this(Page)を引数に渡すと、ページ内の全項目をListで取得する。
        List<WebControl> webControls = GetAllWebControl(this);
 
        label1.Text = "";
 
        foreach (WebControl control in webControls)
        {
            label1.Text += control.ID + "<br />";
        }
    }
 
    //引数に渡したControl内にあるWebControlを再帰的に検索して全てListに
    //格納して返します。
    //ページ内の全項目を取得したい場合はPageを引数に渡します。
    protected List<WebControl> GetAllWebControl(Control parent)
    {
        var controls = new List<WebControl>();
 
        foreach (Control child in parent.Controls)
        {
            controls.AddRange(GetAllWebControl(child));
        }
 
        if (parent is WebControl)
        {
            //WebControlとそのサブクラスのみListに追加。
            controls.Add((WebControl)parent);
        }
 
        return controls;
    }
} 

上記を実行すると、Label1 に全ての項目のIDが表示されます。 Label1 に表示される内容は次の通りです。

Label1の表示内容
1
2
3
4
5
6
7
8
text1
text2
panel2
text3
panel3
label1
panel1
button1 
スポンサーリンク
スポンサーリンク