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);
}