2017-04-06 5 views
0

J'ai besoin d'aide pour parcourir 2 grilles de vue sur une page. Finalement, j'aurai 6 total gridviews (ou sections) sur la page. Chaque grille a les mêmes colonnes, mais chacune aura un nombre différent de lignes. L'objectif de l'itération est de compter le nombre total d'éléments radiobuttonlist sélectionnés dans une colonne parmi les lignes gridview totales dans l'itération gridview actuelle afin que l'information puisse être affichée dans une étiquette sur le bouton Envoyer comme ceci: "10 of 14 évaluations dans la section 1 sont cochées. " Ou " 11 de 11 notes en Section 2 sont vérifiées. " Ou quel que soit le cas.Besoin d'aide pour boucler plusieurs grilles sur une page C# .net

je googlé pour trouver le code que j'ai jusqu'à présent, et suivi ce fil, y compris le chat How to use a for loop to modify multiple controls (gridview)
Mais je ne comprends pas quoi faire avec cette ligne de code. Qu'est-ce qui se passe après l'ellipse? Cela s'applique-t-il dans ma situation?

((GridView) Page.FindControl("GridView" + i)).Rows[1]......... 

Quand j'ajoute la .Rows[j] (ou 1), une ligne rouge apparaît sur squiggly .Rows ... avec avertissement: System.Web.UI.Control ne contient pas de définition pour « lignes » et aucune méthode extenstion ' Les lignes acceptant le premier argument de type system.web.ui.control ont été trouvées (manque-t-il une directive using ou une référence d'assembly?). J'ai effectivement using System.Linq; déclaration en haut de ma page. Voici mon code à compter grâce à la grille. Les identifiants GridView sont GridView1, GridView2, etc. GridViews sont remplis à l'aide de sqldatasource et contiennent à la fois des colonnes de champs liés et de modèles. Si je lance le code via Afficher dans le navigateur il lance erreur « référence d'objet non définie à une instance d'un objet » sur cette ligne de code:

foreach (GridViewRow row in gv.Rows); 

Au cours de débogage cependant, il semble reconnaître la GridView correcte car il obtient le nombre de lignes correct et les éléments de radiobuttonlist corrects sélectionnés.

code:

//UPDATED code includes solution: 
protected void CountSelectedRatings() 
     { 
      int count = 0; 
      int itemsSelected = 0; 
      string str = string.Empty; 
      int i = 1; 

      //loop through 6 gridviews 
      for (i = 1; i <= 6; i++) 
      { 
       //identify current grid to iterate through 
       GridView gv = (GridView)Page.FindControl("GridView" + i); 

       itemsSelected = 0; 

       if (gv != null) 
       { 
        foreach (GridViewRow row in gv.Rows) 
        { 
         count = gv.Rows.Count; 


          RadioButtonList rbl = row.FindControl("rblRating" + i) as RadioButtonList; 

          foreach (ListItem item in rbl.Items) 
          { 
           if (item.Selected == true) 
           { 
            //increment count 
            itemsSelected += 1; 

            switch (i) 
            { 
             case 1: 
              strRowCountMessage1 = itemsSelected + " of " + count + " ratings in Section " + i + " are checked."; 
              lblRowCountMessage1.Text = strRowCountMessage1; 
              break; 

             case 2: 
              strRowCountMessage2 = itemsSelected + " of " + count + " ratings in Section " + i + " are checked."; 
              lblRowCountMessage2.Text = strRowCountMessage2; 
              break; 

             //case 3: 
             // strRowCountMessage3 = itemsSelected + " of " + count + " ratings in Section " + i + " are checked."; 
             // lblRowCountMessage3.Text = strRowCountMessage3; 
             // break; 

             //case 4: 
             // strRowCountMessage4 = itemsSelected + " of " + count + " ratings in Section " + i + " are checked."; 
             // lblRowCountMessage3.Text = strRowCountMessage4; 
             // break; 

             //case 5: 
             // strRowCountMessage5 = itemsSelected + " of " + count + " ratings in Section " + i + " are checked."; 
             // lblRowCountMessage3.Text = strRowCountMessage5; 
             // break; 

             //case 6: 
             // strRowCountMessage6 = itemsSelected + " of " + count + " ratings in Section " + i + " are checked."; 
             // lblRowCountMessage3.Text = strRowCountMessage6; 
             // break; 
            }//end switch 

           }//end if item.Selected = True 

         }//end foreach ListItem 

        }//end foreach gridviewrow 
       }//end if gv !=null 
      }// end for loop i 

      GridView1.DataBind(); 
      GridView2.DataBind(); 
      //GridView4.DataBind(); 
      //GridView5.DataBind(); 
      //GridView6.DataBind(); 

    } 
+0

Voir si cela aide: . – TambaySaPinas

+0

Merci de votre intérêt pour mon problème. Ce lien concerne la recherche d'une valeur d'élément radiobuttonlist, mais mon code parvient à obtenir cette information. Mes erreurs de code à "foreach (ligne GridViewrow dans gv.Rows)" si laissé pour fonctionner mais trouve les éléments de grille et radiobuttonlist corrects pendant le débogage. – Doreen

+0

Je pense que le problème doit faire avec ne vérifiant pas la grille nulle d'abord .... – Doreen

Répondre

0

La solution à ma question initiale était de vérifier gridview null avant la boucle foreach. Un extrait de cette partie du code est ci-dessous. J'ai révisé mon code original pour refléter le code final qui compte les lignes avec le bouton radio coché par rapport au nombre total de lignes et affiche dans une étiquette.

 for (i = 1; i <= 6; i++) 
     { 
      //identify current grid to iterate through 
      GridView gv = (GridView)Page.FindControl("GridView" + i); 

      itemsSelected = 0; 

      if (gv != null)//<-- 
      { 

       foreach (GridViewRow row in gv.Rows) 
       {//code continues here}}