2017-07-10 4 views
0

Good Day、みんな。入れ子にされたforeach()がうんざりしています

私は現在、ナビゲーション用のフルページオーバーレイを作成しています。私は入れ子になったforeach()ループに関して過去2日間この問題を解明しようとしています。

私はこれらのページを投稿とリンクしている可能性があります。私は

public DataTable GetMain() 
    { 
     string sql = "SELECT Id,Title,Slug from Pages"; 

     SqlCommand SQLComm = new SqlCommand(sql, con); 
     SqlDataAdapter SQLAd = new SqlDataAdapter(SQLComm); 
     DataTable dt = new DataTable(); 
     SQLAd.Fill(dt); 
     return dt;    
    } 

    private void GetAll() 
    { 
     DataTable dt = new DataTable(); 
     HyperLink newhyperlink = new HyperLink(); 
     Label newlabel = new Label(); 

     foreach (DataRow row in GetMain().Rows) 
     { 
      newlabel.ID = "li"; 
      MainMenu.Controls.Add(newlabel); 
      newlabel.Text = @"<li class""dropdown"" data-toggle=""collapse"""; 
      newlabel = new Label(); 

      newhyperlink.ID = "Main"; 
      MainMenu.Controls.Add(newhyperlink); 
      newhyperlink.Text = row["Title"].ToString(); 
      newhyperlink.NavigateUrl = row["Slug"].ToString(); 
      newhyperlink = new HyperLink(); 
      html.Append("></li>"); 
      html.Append("<ul class=\"list-group\">"); 

      var sql2 = "SELECT po.Id as PostId, po.Slug as PostSlug, po.Title as PostTitle, pa.Slug as PageSlug, pa.Id as PageId FROM Posts po " + 
         "LEFT JOIN PagesPostsMap m ON po.Id = m.PostId " + 
         "LEFT JOIN Pages pa ON m.PageId = pa.Id " + 
         "WHERE pa.Id = "+row["Id"] + ""; 

      SqlDataAdapter SQLAd = new SqlDataAdapter(sql2, con); 
      SQLAd.Fill(dt2); 



      foreach (DataRow row2 in dt2.Rows) 
      { 
       object value = row2["PostId"]; 
       if (value != DBNull.Value) 
       { 
        if (row["Id"] != row2["PageId"]) 
        { 
         newlabel.ID = "li"; 
         MainMenu.Controls.Add(newlabel); 
         newlabel.Text = @"<li class""dropdown-menu"""; 
         newlabel = new Label(); 

         newhyperlink.ID = "Sub" + i.ToString(); 
         MainMenu.Controls.Add(newhyperlink); 
         newhyperlink.Text = row2["PostTitle"].ToString(); 
         newhyperlink.NavigateUrl = row2["PageSlug"].ToString() + "/" + row2["PostSlug"].ToString(); 
         newhyperlink = new HyperLink(); 


         newlabel.ID = "li"; 
         MainMenu.Controls.Add(newlabel); 
         newlabel.Text = "</li>"; 
         newlabel = new Label(); 
        } 
       } 

      } 

     } 

    } 

Home Page Technologies Page Post 1/ Post 2/ Post3 Contact Us Page About Us Page

しかし、私は取得していことです::そしてここで私が達成しようとしているものです。ここ

Home Page Technologies Page Post 1/ Post 2/ Post3 Contact Us Page Post 1/ Post 2/ Post3 About Us Page Post 1/ Post 2/ Post3

は私のコードですクラスやものが合わないのなら、ごめんなさい。私はまだCSSとJSの仕組みを理解しようとしています。

ご協力いただきありがとうございます。

+0

こんにちはを追加すること自由に感じ、あなたは、Visual Studioを使用していますか? – chrillelundmark

+0

@chrillelundmark。はい。 – SlicedBread

+0

その質問は実際には無関係でした。最初はあなたのSQLに何か問題があったと思っていましたが、あなたの質問を正しく読んでいました。サーバーエクスプローラでSQLを実行して、作成した行の数を確認することができたら、私は考えましたが、正しい行数を生成することができます。 – chrillelundmark

答えて

0
public DataTable GetMain() 
    { 
     string sql = "SELECT Id,Title,Slug from Pages"; 

     SqlCommand SQLComm = new SqlCommand(sql, con); 
     SqlDataAdapter SQLAd = new SqlDataAdapter(SQLComm); 
     DataTable dt = new DataTable(); 
     SQLAd.Fill(dt); 
     return dt;    
    } 

    private void GetAll() 
    { 
     DataTable dt = new DataTable(); 
     HyperLink newhyperlink = new HyperLink(); 
     Label newlabel = new Label(); 

     foreach (DataRow row in GetMain().Rows) 
     { 
      newlabel.ID = "li"; 
      MainMenu.Controls.Add(newlabel); 
      newlabel.Text = @"<li class""dropdown"" data-toggle=""collapse"""; 
      newlabel = new Label(); 

      newhyperlink.ID = "Main"; 
      MainMenu.Controls.Add(newhyperlink); 
      newhyperlink.Text = row["Title"].ToString(); 
      newhyperlink.NavigateUrl = row["Slug"].ToString(); 
      newhyperlink = new HyperLink(); 
      html.Append("></li>"); 
      html.Append("<ul class=\"list-group\">"); 

      var sql2 = "SELECT po.Id as PostId, po.Slug as PostSlug, po.Title as PostTitle, pa.Slug as PageSlug, pa.Id as PageId FROM Posts po " + 
         "JOIN PagesPostsMap m ON po.Id = m.PostId " + 
         "JOIN Pages pa ON m.PageId = pa.Id " + 
         "WHERE pa.Id = "+row["Id"] + ""; 

      SqlDataAdapter SQLAd = new SqlDataAdapter(sql2, con); 
      SQLAd.Fill(dt2); 



      foreach (DataRow row2 in dt2.Rows) 
      { 

         newlabel.ID = "li"; 
         MainMenu.Controls.Add(newlabel); 
         newlabel.Text = @"<li class""dropdown-menu"""; 
         newlabel = new Label(); 

         newhyperlink.ID = "Sub" + i.ToString(); 
         MainMenu.Controls.Add(newhyperlink); 
         newhyperlink.Text = row2["PostTitle"].ToString(); 
         newhyperlink.NavigateUrl = row2["PageSlug"].ToString() + "/" + row2["PostSlug"].ToString(); 
         newhyperlink = new HyperLink(); 


         newlabel.ID = "li"; 
         MainMenu.Controls.Add(newlabel); 
         newlabel.Text = "</li>"; 
         newlabel = new Label(); 

      } 

     } 

    } 
+0

何も変更されていません。 – SlicedBread

+0

@ SlicedBread申し訳ありませんが、私は上記の他のループに気づきませんでした。このスクリプトのスクリーンショットの結果を投稿して、テーブル参照を確認できるかどうかは問題ありません。 はTOP 10ポーSELECT *、 。 '|'、 のm *、 '|'、 PA * postsからPO LEFTがpo.Id = m.PostId LEFT JOINのページのPA ON ON PagesPostsMap mを登録しよう。 m.PageId = pa.Id –

+0

私はSQL Serverを使用しています。スクリプトを実行できません – SlicedBread

0

あなたのコードは実際にあなたがするように指示しています。 GetMainのすべての行について、dt2(datatable2)のすべてを注文します。達成しようとするものが必要な場合は、条件を設定し、2番目のforeachをその条件に入れなければなりません。

if(tech parts row) 
{ 
    "your second foreach" 
} 

私は何をmissunderstand場合は、より多くの情報

関連する問題