2016-09-20 10 views
0

選択した2つの日付間の各日付を繰り返すループがあります。日付のforループから空白スペースが生成される

これは、その日付に各製品のパネルを作成し、次に移動します。

これはうまくいきますが、ループを再実行すると、新しいパネルと古いパネルの間に空白ができます。黒い線は、私が話して何を示している

Black Lines

(私の小さなスクリーンの小さな原因):ここでは一例です。短いものは、各パネルの間の通常の間隔であり、長いものはループを再び実行するときを示します。

私が心配しているのは、最初の追加後に製品を追加したい場合、ループが2番目または3番目または4番目の時間に実行され、そのギャップを残して不快なビューを作成するからです。

誰かがこのギャップを引き起こしていることを教えてもらえますか?ここではこのセクションのコードです(私はSQLインジェクションについて知っています、私はDALにパラメータを送りますが、この質問のために私はSQLクエリ):

for (DateTime date = dtpSDate.Value; date.Date <= dtpCDate.Value; date = date.AddDays(1)) 
{ 
    pnlReport.Controls.Add(new Label { Text = date.ToString(), Height = 20, Width = 150, Name = date.ToString(), Location = new Point(20, globalY), Font = new Font("Arial", 10, FontStyle.Bold) }); 
    globalY += 30; 
    foreach (DataRowView lstvItem in chkListProducts.CheckedItems) 
    { 
      DataTable ProdTmp2 = new DataTable(); 
      string sqlP2 = "SELECT * FROM Product WHERE ProdID = '" + lstvItem[this.chkListProducts.ValueMember] + "'"; 
      ProdTmp2 = db.GetDataTable(sqlP2); 

      if (Side == "Left") 
      { 
       Panel pnltmp = new Panel(); 
       pnltmp.Size = new Size(472, 120); 
       pnltmp.Location = new Point(5, globalY); 
       pnltmp.BackColor = Color.Green; 
       pnltmp.Name = ProdTmp2.Rows[0][1].ToString(); 
       Label l = new Label(); 
       l.Text = ProdTmp2.Rows[0][1].ToString(); 
       l.Location = new Point(5, 5); 
       pnltmp.Controls.Add(l); 
       pnlReport.Controls.Add(pnltmp); 
       Side = "Right"; 
       last = ProdTmp2.Rows[0][1].ToString(); 
      } 
      else 
      { 
       Panel pnltmp = new Panel(); 
       pnltmp.Size = new Size(472, 120); 
       pnltmp.Location = new Point(487, globalY); 
       pnltmp.BackColor = Color.Red; 
       pnltmp.Name = ProdTmp2.Rows[0][1].ToString(); 
       Label l = new Label(); 
       l.Text = ProdTmp2.Rows[0][1].ToString(); 
       l.Location = new Point(5, 5); 
       pnltmp.Controls.Add(l); 
       pnlReport.Controls.Add(pnltmp); 
       Side = "Left"; 
       globalY += 140; 
       last = ProdTmp2.Rows[0][1].ToString(); 
      } 
    } 

    if (Side == "Right") 
    { 
      Side = "Left"; 
       globalY += 170; 
    }     
} 

追加情報:日付のギャップが大きくなる。空白スペースのギャップは大きくなります。

+0

db.GetDataTable(sqlP2)リターンが後続の呼び出しに注目してもらえますか? – SpaceghostAli

+0

@SpaceghostAli私はなぜそれが表示されません。なぜなら、何かが最初に得られ、パラメータが変わらないからです。その後何かを得なければならない。 – Cleaven

+0

これはコードの攻勢作品だ、それはあなたがchkListProducts.CheckedItems 上で[コード] 場合(サイド==「右」) { サイド=「左」をあなたのforeachを終えるたびにグローバルにするために170を追加します。 globalY + = 170; } [/ code] –

答えて

0

したがって、終了コードはこのようになり、スペースは現在存在しません。 すべてに高画質。

private void AddProducts() 
    { 
     foreach (Panel p in pnlReport.Controls.OfType<Panel>()) 
     { 
      if (p.Name == last) 
      { 
       globalY = p.Location.Y + 140; 
      } 
     } 

     for (DateTime date = dtpSDate.Value; date.Date <= dtpCDate.Value; date = date.AddDays(1)) 
     { 
      pnlReport.Controls.Add(new Label { Text = date.ToString(), Height = 20, Width = 150, Name = date.ToString(), Location = new Point(20, globalY), Font = new Font("Arial", 10, FontStyle.Bold) }); 
      globalY += 30; 
      foreach (DataRowView lstvItem in chkListProducts.CheckedItems) 
      { 
       string table = ""; 
       string select = ""; 
       if (Regex.IsMatch(lstvItem[this.chkListProducts.DisplayMember].ToString(), @"^[a-hA-H]")) 
       { 
        table = "ProductHistoryAH"; 
       } 
       else if (Regex.IsMatch(lstvItem[this.chkListProducts.DisplayMember].ToString(), @"^[i-qI-Q]")) 
       { 
        table = "ProductHistoryIQ"; 
       } 
       else if (Regex.IsMatch(lstvItem[this.chkListProducts.DisplayMember].ToString(), @"^[r-zR-Z]")) 
       { 
        table = "ProductHistoryRZ"; 
       } 

       DataTable ProdTmp1 = new DataTable(); 
       string sqlP1 = "SELECT * FROM " + table + " WHERE ProdID = '" + lstvItem[this.chkListProducts.ValueMember] + "' AND ProdHDate = '" + date.ToString(@"yyyy\/MM\/dd") + "'"; 
       ProdTmp1 = db.GetDataTable(sqlP1); 

       DataTable ProdTmp2 = new DataTable(); 
       string sqlP2 = "SELECT * FROM Product WHERE ProdID = '" + lstvItem[this.chkListProducts.ValueMember] + "'"; 
       ProdTmp2 = db.GetDataTable(sqlP2); 

       if (Side == "Left") 
       { 
        Panel pnltmp = new Panel(); 
        pnltmp.Size = new Size(472, 120); 
        pnltmp.Location = new Point(5, globalY); 
        pnltmp.BackColor = Color.Green; 
        pnltmp.Name = ProdTmp2.Rows[0][1].ToString() + count.ToString(); 
        //Name 
        Label lblName = new Label(); 
        lblName.Text = lstvItem[this.chkListProducts.DisplayMember].ToString(); 
        lblName.Location = new Point(5, 5); 
        pnltmp.Controls.Add(lblName); 
        int Location = 0; 
        //Count 
        if (chkPCount.Checked) 
        { 
         Label lblCount = new Label(); 
         if(ProdTmp1.Rows.Count>0) 
         { 
          lblCount.Text = "Count: " + ProdTmp1.Rows[0][4].ToString(); 
         } 
         else 
         { 
          lblCount.Text = "Count: 0"; 
         }        
         lblCount.Location = new Point(17, 32); 
         pnltmp.Controls.Add(lblCount); 
        }            
        pnlReport.Controls.Add(pnltmp); 
        Side = "Right"; 
       } 
       else if(Side == "Right") 
       { 
        Panel pnltmp = new Panel(); 
        pnltmp.Size = new Size(472, 120); 
        pnltmp.Location = new Point(487, globalY); 
        pnltmp.BackColor = Color.Red; 
        pnltmp.Name = ProdTmp2.Rows[0][1].ToString() + count.ToString(); 
        //Name 
        Label lblName = new Label(); 
        lblName.Text = lstvItem[this.chkListProducts.DisplayMember].ToString(); 
        lblName.Location = new Point(5, 5); 
        pnltmp.Controls.Add(lblName); 
        //Count 
        if (chkPCount.Checked) 
        { 
         Label lblCount = new Label(); 
         if (ProdTmp1.Rows.Count > 0) 
         { 
          lblCount.Text = "Count: " + ProdTmp1.Rows[0][4].ToString(); 
         } 
         else 
         { 
          lblCount.Text = "Count: 0"; 
         } 
         lblCount.Location = new Point(17, 32); 
         pnltmp.Controls.Add(lblCount); 
        }       
        pnlReport.Controls.Add(pnltmp); 
        Side = "Left"; 
        globalY += 140;           
       } 
       last = ProdTmp2.Rows[0][1].ToString() + count.ToString(); 
      } 
      if (Side == "Right") 
      { 
       Side = "Left"; 
       globalY += 140; 
      }   
     } 
     count++; 
    } 

と出力:

Output

関連する問題