使用findControl查找子元素

时间:2016-12-02 09:46:45

标签: c# asp.net

我有一个Placeholder我在panel中有一个动态创建的placeholder,我在面板中也有一些动态添加的单选按钮,现在我可以使用{{1}如果它们是findControl()的直接子项,则找到单选按钮。

我真的花了整整昨天试图找到它们placeholder时的子元素。怎么办呢?

以下是我的代码:

Panel

2 个答案:

答案 0 :(得分:0)

你应该使用它的Id递归搜索控件的方法。这意味着该方法将在(在您的情况下)占位符内搜索控件。如果方法找到控制权,它将返回它。如果没有,它将搜索每个占位符的子控制,“更深”。然后,如果找不到任何内容,它将在每个占位符子控件的子控件等中再搜索一个级别。)

powershell.exe -nologo -noprofile -command "&{ Add-Type -A 'System.IO.Compression.FileSystem' [System.IO.Compression.ZipFile]::CreateFromDirectory('c:/path/to/source/folder/', 'c:/path/to/output/file.zip');}"

然后像这样使用它:

private Control FindControl(string ctlToFindId, Control parentControl)
{
    foreach (Control ctl in parentControl.Controls)
    {
        if (ctl.Id == ctlToFindId)
            return ctl;
    }

    if (ctl.Controls != null)
    {
        var c = FindControl(ctlToFindId, ctl);
        if (c != null) return c;
    }

    return null;
}

答案 1 :(得分:0)

查找控件递归是一个选项,但它也有几个down-sides

如果您知道所有控件的ID,则可以使用FindControl

RadioButtonList myRadioButton = PlaceHolder1.FindControl("Panel1").FindControl("RadioButtonList1") as RadioButtonList;
Label1.Text = myRadioButton.SelectedValue;

但是您需要为动态添加的控件提供ID。

Panel myPanel = new Panel();
myPanel.ID = "Panel1";

RadioButtonList myRadioButton = new RadioButtonList();
myRadioButton.ID = "RadioButtonList1";

PlaceHolder1.Controls.Add(myPanel);
myPanel.Controls.Add(myRadioButton);