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.

谁能帮帮我?

4

4 回答 4

1

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

然后你可以写

panelArray[(int)dRow.ItemArray[i]].BackColor = Color.LightSteelBlue;
于 2012-06-03T12:15:06.790 回答
1

动态创建面板并将面板添加到一个父面板。为每个面板提供唯一的 ID,例如。面板日_1、面板日_2、面板日_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;
于 2012-06-03T12:22:27.937 回答
0

哦!实际上我认为我们也可以在不创建数组的情况下访问。如果我们观察到他以顺序的方式给出了面板名称。像这样

panDay1
panDay2
panDay3
  .
  .
panDay31.

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

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

希望能帮助到你。

于 2012-06-03T12:32:38.080 回答
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;
    }
于 2012-06-03T12:34:55.037 回答