我想知道如何做到這一點,我想我已經找到了解決方案。 您可以在aspx端定義控件的屬性。如果控件是WebControl
(許多控件(如TextBox,Label,Button等等)都是WebControls,但是某些數據綁定控件(如Repeater,GridView等)不是),則還可以查詢這些屬性。通過使用這些信息,我寫了一個遞歸方法。這是,它的使用方法:
First Name
<asp:TextBox runat="server" ID="tbxFirstName" ControlGroup="Editable" />
<asp:Label runat="server" ID="lblFirstName" ControlGroup="ReadOnly" />
Last Name
<asp:TextBox runat="server" ID="tbxLastName" ControlGroup="Editable" />
<asp:Label runat="server" ID="lblLastName" ControlGroup="ReadOnly" />
<asp:Button ID="btn" runat="server" Text="Do" OnClick="btn_Click" />
後面的代碼:
protected void btn_Click(object sender, EventArgs e)
{
var controlsOfGroupReadonly = ControlsInGroup("Readonly");
}
protected IEnumerable<WebControl> FindControlsInGroup(Control control, string group)
{
WebControl webControl = control as WebControl;
if (webControl != null && webControl.Attributes["ControlGroup"] != null && webControl.Attributes["ControlGroup"] == group)
{
yield return webControl;
}
foreach (Control item in control.Controls)
{
webControl = item as WebControl;
if (webControl != null && webControl.Attributes["ControlGroup"] != null && webControl.Attributes["ControlGroup"] == group)
{
yield return webControl;
}
foreach (var c in FindControlsInGroup(item, group))
{
yield return c;
}
}
}
protected IEnumerable<WebControl> ControlsInGroup(string group)
{
return FindControlsInGroup(Page, group);
}
我不知道有沒有辦法這種方法轉換爲索引。
我試過了,結果對我來說是成功的。
這是一個很好的問題。感謝:)
我認爲根控制也應該移到參數中,因爲你可能想在FormView前進行搜索進入模板領域也是一個值得解決的問題。 – 2010-09-23 13:39:56
你確實是對的。但是FindControlsInGroup方法可以完成你所說的。您可以將任何控件作爲參數傳遞,並返回該組中的控件。可能我們可以給ControlsInGroups和FindControlsInGroup方法賦予相同的名稱作爲重載。 – 2010-09-23 13:53:49