C# For循环和Foreach连续循环?

C# For循环和Foreach连续循环?,c#,excel,datagridview,C#,Excel,Datagridview,我试图将数据表的所有列值作为复选框放置在面板中 但问题是我一直有相同的循环。我已经根据列.Count限制了数组循环,但它仍然在循环 这是我的问题的一个可视化表示 我想把它减少到F19,结束循环 这是我的密码: int dynamicHeight=0; int=10; 对于(inti=0;i您只需要创建一次数组,并且只需要遍历它一次 int dynamicHeight = 0; int padding = 10; CheckBox[] chk = new CheckBox[dt.Colum

我试图将
数据表的所有列值作为
复选框放置在面板中

但问题是我一直有相同的循环。我已经根据
列.Count限制了数组循环,但它仍然在循环

这是我的问题的一个可视化表示

我想把它减少到F19,结束循环

这是我的密码:
int dynamicHeight=0;
int=10;

对于(inti=0;i您只需要创建一次数组,并且只需要遍历它一次

int dynamicHeight = 0;
int padding = 10;

CheckBox[] chk = new CheckBox[dt.Columns.Count];

for (int i = 0; i <= dt.Columns.Count - 1; i++)
{
    var column = dt.Columns[i];
    chk[i] = new CheckBox();
    chk[i].Name = column.ColumnName;
    chk[i].Text = column.ColumnName;
    chk[i].AutoCheck = true;
    chk[i].Bounds = new Rectangle(10, 20 + padding + dynamicHeight, 40, 22);
    panelCol.Controls.Add(chk[i]);
    dynamicHeight += 20;
    panelCol.Size = new Size(120, dynamicHeight);
    panelCol.Controls.Add(chk[i]);
    chk[i].Location = new Point(0, dynamicHeight);
    chk[i].Size = new Size(120, 21);
    panelCol.BackColor = Color.White;
    panelCol.AutoScroll = true;
    //panelCol.AutoScrollMinSize = new Size (0, 1200);
}
int dynamicHeight=0;
int=10;
复选框[]chk=新复选框[dt.Columns.Count];

对于(int i=0;i您用于添加复选框的代码正在运行
dt.Columns.Count*dt.Columns.Count
次,理想情况下,它应该只运行
dt.Columns.Count
次以获得所需的输出

在不改变大部分已实现代码的情况下,以下内容应该适用于您的情况

 CheckBox[] chk = new CheckBox[dt.Columns.Count];
 for (int i = 0; i <= dt.Columns.Count - 1; i++)
            {

                chk[i] = new CheckBox();
                chk[i].Name = dt.Columns[i].ColumnName;
                chk[i].Text = dt.Columns[i].ColumnName;
                chk[i].AutoCheck = true;
                chk[i].Bounds = new Rectangle(10, 20 + padding + dynamicHeight, 40, 22);
                panelCol.Controls.Add(chk[i]);
                dynamicHeight += 20;
                panelCol.Size = new Size(120, dynamicHeight);
                panelCol.Controls.Add(chk[i]);
                chk[i].Location = new Point(0, dynamicHeight);
                chk[i].Size = new Size(120, 21);
                panelCol.BackColor = Color.White;
                panelCol.AutoScroll = true;
            }

似乎做不到。如果我删除
foreach
,我只会得到名为1-19的复选框。:/foreach也一样,我不知道如何将列名引用到复选框中。如果必须添加索引,则使用
foreach
没有任何意义。只需将
用于
一个。我只是在引用数据列时遇到了问题。我几乎不知道现在我只需要使用
dt.Columns[I].ColumnName
 CheckBox[] chk = new CheckBox[dt.Columns.Count];
 for (int i = 0; i <= dt.Columns.Count - 1; i++)
            {

                chk[i] = new CheckBox();
                chk[i].Name = dt.Columns[i].ColumnName;
                chk[i].Text = dt.Columns[i].ColumnName;
                chk[i].AutoCheck = true;
                chk[i].Bounds = new Rectangle(10, 20 + padding + dynamicHeight, 40, 22);
                panelCol.Controls.Add(chk[i]);
                dynamicHeight += 20;
                panelCol.Size = new Size(120, dynamicHeight);
                panelCol.Controls.Add(chk[i]);
                chk[i].Location = new Point(0, dynamicHeight);
                chk[i].Size = new Size(120, 21);
                panelCol.BackColor = Color.White;
                panelCol.AutoScroll = true;
            }
int i = 0;
CheckBox[] chk = new CheckBox[dt.Columns.Count];
foreach (DataColumn column in dt.Columns)
{

    chk[i] = new CheckBox();
    chk[i].Name = column.ColumnName;
    chk[i].Text = column.ColumnName;
    chk[i].AutoCheck = true;
    chk[i].Bounds = new Rectangle(10, 20 + padding + dynamicHeight, 40, 22);
    panelCol.Controls.Add(chk[i]);
    dynamicHeight += 20;
    panelCol.Size = new Size(120, dynamicHeight);
    panelCol.Controls.Add(chk[i]);
    chk[i].Location = new Point(0, dynamicHeight);
    chk[i].Size = new Size(120, 21);
    panelCol.BackColor = Color.White;
    panelCol.AutoScroll = true;

    i++;
    //panelCol.AutoScrollMinSize = new Size (0, 1200);
}