找到记录时更改右侧面板背景

本文关键字:侧面 背景 记录 | 更新日期: 2023-09-27 18:36:12

我可以在以下问题上使用一些帮助:

我一个月中的每一天都有 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.

谁能帮帮我?

找到记录时更改右侧面板背景

动态创建面板并将面板添加到一个父面板。为每个面板提供唯一的 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;

你应该制作一个包含所有 31 个面板的数组。

然后你可以写

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

可以使用字符串为控件集合编制索引。 这允许这种语法:

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

哦! 实际上我认为我们也可以在不创建数组的情况下访问。如果我们观察他以顺序给出小组名称。喜欢这个

panDay1
panDay2
panDay3
  .
  .
panDay31.

如果是这种情况,如果我们假设控件 c 是所有面板的父级,那么我们可以使用这样的名称访问它

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

希望对您有所帮助。