2017-04-06 6 views
0

ページ上で2つのgridviewを繰り返し実行するのに役立つ必要があります。最終的には、ページに合計6つのグリッドビュー(またはセクション)が表示されます。各グリッドビューは同じ列を持ちますが、それぞれ異なる行数を持ちます。反復の目的は、現在のグリッドビューの反復で、1つの列で選択されたラジオボタンリスト項目の合計数をカウントして、送信ボタンのラベルに情報を表示できるようにすることです。 "10セクション1の14個の評価がチェックされています。 "または " 2の11の評価が11個あります。または場合によっては可能性があります。ページ上の複数のグリッドビューをループする際の助けが必要です。C#.net

私は私がこれまで持っているコードを思い付くためにGoogleで検索し、チャットHow to use a for loop to modify multiple controls (gridview)
含むこのスレッドに従っしかし、私はこのコード行をどうするかを理解していないしています。省略記号の後ろには何がありますか?それは私の状況に適用されますか?

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

私は追加すると.Rows[j](または1)、赤い波線が警告して... .Rowsに表示されます:system.web.ui.controlは「行」なしextenstion方法 'の定義が含まれていません行は、system.web.ui.control型の最初の引数を受け入れることができます(指示文またはアセンブリ参照を使用していませんか?)。私はusing System.Linqを持っています。私のページの上部にあるステートメント。 ここで私のコードは、gridviewsを数えることです。 GridViewのidはGridView1、GridView2などです。GridViewsはsqldatasourceを使用して塗りつぶされ、バインドされたフィールド列とテンプレートフィールドの両方の列を含みます。私はブラウザにビュー経由でコードを実行した場合には、このコード行の「オブジェクトのインスタンスに設定されていないオブジェクト参照」エラーがスローされます:デバッグ中に

foreach (GridViewRow row in gv.Rows); 

しかし、正しいのGridViewを認識しているようです正しい行数と正しいラジオボタンリスト項目が選択されているためです。

コード:

//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

このことができます参照してください: TambaySaPinas

+0

私の問題に関心をお寄せいただきありがとうございます。そのリンクはラジオボタンリスト項目の値を見つけることですが、私のコードはその情報をうまく取得しています。 「foreach(GridViewrow row in gv.Rows)」のコードエラー。実行すると残っているが、デバッグ中に正しいグリッドとラジオボタンリストの項目が見つかる。 – Doreen

+0

問題は最初にヌルグリッドをチェックしないことと関係があると思います.... – Doreen

答えて

0

私の元の質問に対する解決策は、foreachループの前にヌルのGridViewをチェックすることでした。コードのその部分からの抜粋は以下の通りです。元のコードを修正して、行数をカウントし、ラジオボタンをクリックして合計行数を確認し、ラベルに表示する最終コードを反映させました。

 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}} 
関連する問題