2012-06-03 29 views
0

我可以在以下事項上使用一點點幫助:找到記錄時更改右側面板背景

我在該月的每一天都有31個面板。 我想在當天發現一個記錄(在數據集中)時更改面板的背景。

如果你看一下代碼,你可以看到我要去哪裏,所有的面板都需要單獨指出。如果你問我,這看起來好長。我認爲你需要爲所有面板製作一個索引?

是否有另一種/更好的方法來做到這一點?如果是這樣,怎麼樣?

 int MaxRows; 
     MaxRows = ds.Tables["Dataset"].Rows.Count; 

     for (int i = 0; i != (MaxRows); i++) 
     { 
      DataRow dRow = ds.Tables["Dataset"].Rows[i]; 

      if (dRow.ItemArray.GetValue(1).ToString() == "1") 
      { 
       panDay1.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "2") 
      { 
       panDay2.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "3") 
      { 
       panDay3.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "4") 
      { 
       panDay4.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "5") 
      { 
       panDay5.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "6") 
      { 
       panDay6.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "7") 
      { 
       panDay7.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "8") 
      { 
       panDay8.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "9") 
      { 
       panDay9.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "10") 
      { 
       panDay10.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "11") 
      { 
       panDay11.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "12") 
      { 
       panDay12.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "13") 
      { 
       panDay13.BackColor = Color.LightSteelBlue; 
      } 
      else if (dRow.ItemArray.GetValue(1).ToString() == "14") 
      { 
       panDay14.BackColor = Color.LightSteelBlue; 
      } 
      etc. 
      etc. 
      etc. 

任何人都可以幫我嗎?

回答

0

您可以使用字符串爲控件集合建立索引。允許這樣的語法:

for (int i = 0; i != (MaxRows); i++) 
    { 
     DataRow dRow = ds.Tables["Dataset"].Rows[i]; 
     this.Controls["panDay" + dRow.ItemArray.GetValue(1)].BackColor = Color.LightSteelBlue; 
    } 
+0

這一個五星級我最好的。感謝大家的快速幫助,非常感謝。 – Marcel

1

您應該製作一個包含所有31個面板的陣列。

然後,您可以編寫

panelArray[(int)dRow.ItemArray[i]].BackColor = Color.LightSteelBlue; 
1

動態創建面板,並增加了面板的一個父面板。爲每個面板提供唯一的ID,例如。 panelDay_1,panelDay_2,panelDay_31。現在訪問相應的面板使用

//Create panels dynamically 
for(int i=0;i<dataTable.Rows.Count.i++) 
{ 
    Panel p=new Panel(); 
    p.Name="panelDay_" + i; 

    //Write code to set panels location and size 

    //Add panel to the panels parent 
    parentPanel.Controls.Add(p); 
} 

//Now access panel with the name 
parentPanel.Controls["panelDay_" + i].Color=Color.Blue; 
+0

好主意,但它並不需要他這樣的面板動態創建,改變設計 - 因爲他已經將它們命名爲panDay1,panDay2,... – SimpleVar

0

哦!實際上我認爲我們可以在創建陣列的時候訪問它。如果我們觀察到他已經以不尋常的方式給出了面板名稱。這樣

panDay1 
panDay2 
panDay3 
    . 
    . 
panDay31. 

如果是這樣的情況下,如果我們假設控制c是alll面板父那麼我們就可以使用名稱這樣

//Assuming form itself is the parent then 
c=this; 
c.Cotrols["panDay" + i].BackColor=Color.Blue; 

希望它可以幫助訪問它。