2015-03-06 2 views
0

может ли кто-нибудь помочь мне со следующей проблемой ?: Я создаю checkboxlist для динамического управления каждым элементом в моем списке с категориями. Я помещаю каждый checkboxlist в соответствующий div.проблемы с поиском checkboxlist ID с findcontrol

CheckBoxList cblist = new CheckBoxList(); 

foreach (Category cat in Data.Instance.Listcategorys()) 
     {  
       if (category.TypeID == parameterid) 
      { 
       ListItem item = new ListItem(category.Name, category.ID.ToString()); 
       cblist.ID = "cblist" + parameterid; 
       divRowHeader.Controls.Add(cblist); 
       cblist.Items.Add(item); 
      } 
     } 

Каждый чек-бокс содержит свои собственные предметы, основанные на «параметрике».

я должен проверить, какие детали проверены, так сделал я цикл по каждому элементу, чтобы найти элемент управления:

foreach (Control c in div.Controls) 
     { 
      CheckBoxList cblfound = (((CheckBoxList)c.FindControl("???"))); 

      foreach (ListItem item in cblfound Items) 
      { 
       if (item.Selected) 
       {} 

     } 

проблема здесь. .Net создает свои собственные идентификаторы для каждого Checkboxlist. Как я могу найти элемент управления с помощью .findcontrol? им с помощью .net 3.5

заранее спасибо

+0

Почему вы не используете 'linq'? –

+0

Что делать? добавив checkboxlistID в списки или что-то еще? – user3114347

+0

FindControl, согласно MSDN, предназначен для поиска элемента управления, идентификатор которого неизвестен во время разработки. Вы сами создаете контроль и заселяете его, поэтому вам следует «знать», какой контроль вы ищете, когда хотите посмотреть, что было проверено. Я думаю, что в вашем дизайне или мыслительном процессе есть разъединение. –

ответ

1

Может быть, вы могли бы пересмотреть свой подход, используя IEnumerable.OfType() и некоторые дополнительные LINQ, например, так:

var selectedControls = div.Controls.OfType(CheckBoxList).Where(item => item.Selected); 

foreach(CheckBoxList item in selectedControls) 
{ 
    ... 
} 
+0

var selectedControls = new List (); foreach (Control contr in div.Controls) { selectedControls.AddRange (contr.Controls.OfType ()); } foreach (CheckBoxList itemlist в selectedControls) {} Решил мою проблему. спасибо за решение linq – user3114347