2016-04-29 49 views
0

例如,我有3個複選框,其ID爲checkbox1,checkbox2,checkbox3。我需要在代碼後面進行循環,並根據我的sql隊列結果禁用它們。但是,如果我有超過10個複選框,我不能一個接一個地做,而且有很多邏輯要檢查。我該怎麼做?謝謝。如何通過asp.net中的控件名稱中的數字循環控件

+0

首先你說你有三個複選框,那麼你說你有超過10個。不是很清楚。 –

+0

@TimSchmelter,首先是打印較少名字的例子,然後是10+以上真正的OP用例。聽起來很清楚 – Andrei

+0

你不應該添加邏輯到你的控制ID。名稱只是一個名稱,應該比'checkbox14'更有意義。使用具有多個屬性的類,其中一個屬性爲「bool」屬性。然後從你的數據庫查詢中初始化它,並把它們放在'List '中。在'TemplateFields'中使用'GridView','Repeater'或'DataList',並將'CheckBox'放在那裏。然後將其綁定並將您的邏輯放入適當的事件處理程序f.e. 'RowDataBound'如果你使用'GridView'。 –

回答

0

您可以使用Control.FindControl在容器中使用它們的id來獲取控件。如果您在表單上有複選框,您可以使用this.FindControl

int numberofControls=4; 
for(int i=1; i < numberofControls; i++) 
    ((CheckBox)parentControlId.FindControl("checkbox" + i)).Enabled = false; 

如果有任何機會,你不會有你正在尋找的控制,那麼最好檢查你是否得到了控制。

for(int i=1; i < numberofControls; i++) 
{ 
    CheckBox checkbox = ParentControl.FindControl("checkbox" + i) as Checkbox; 
    if(checkbox != null) 
      checkbox.Enabled = false; 
} 
0

一種常見的方法是聲明一個數組,並把所有的控件在那裏:

Checkbox[] checkboxes = new Checkbox[]{CheckboxOne, CheckboxTwo, AnotherCheckbox}; 

你可以通過這個循環容易。請注意,這允許控件的任意名稱。

另一種只適用於您的控件ID字面上遵循模式ControlNameX的方法是使用FindControl

for (int i=1; i<=3; i++) 
{ 
    Checkbox c = ParentControl.FindControl("Checkbox" + i) as Checkbox; 
} 

還要注意的是FindControl對直接父,這意味着所有的控制你通過循環必須是一個共同的父控件內部被調用。