我只是想输出一列dataGridView控件。第一个代码如下所示,它创建标签并将它们添加到列表和表单中,一切都很好。但是第二个,它不起作用。如何输出到标签?
public List<Label> labels;
private void cmdBot_Click(object sender, EventArgs e)
{
labels = new List<Label>();
for (int i = 0; i <= dataGridView1.RowCount; i++)
{
Label gecoLabel = new Label();
gecoLabel.Text = "test label";
gecoLabel.AutoSize = true;
gecoLabel.Location = new Point(100, 10 * i);
groupBox1.Controls.Add(gecoLabel);
labels.Add(gecoLabel);
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.RowCount; i++)
{
foreach (Label testLabel in labels)
{
testLabel.Text = dataGridView1.Rows[i].Cells["link"].FormattedValue.ToString();
}
}
}
答案 0 :(得分:0)
你似乎在第二个函数中有一个额外的循环,它会导致每个标签从DataGrid设置为 FOR EACH ROW 。但是,既然你没有确切地说 它不起作用,我唯一猜测你可能想要的是这个(请注意,第二种方法转换为1第一种方法中的额外行,但如果您不想这样做,
private void cmdBot_Click(object sender, EventArgs e)
{
labels = new List<Label>();
for (int i = 0; i <= dataGridView1.RowCount; i++)
{
Label gecoLabel = new Label();
//**Since you're already looping through every row, why not just set the label text at the same time?
gecoLabel.Text = dataGridView1.Rows[i].Cells["link"].FormattedValue.ToString();
gecoLabel.AutoSize = true;
gecoLabel.Location = new Point(100, 10 * i);
groupBox1.Controls.Add(gecoLabel);
labels.Add(gecoLabel);
}
编辑:就像@Dmitri E所说,你还需要为每个标签分配一个ID。
答案 1 :(得分:0)
Label gecoLabel = new Label();
gecoLabel.Text = "test label";
gecoLabel.ID = "lbl" + i.ToString();
将该行添加到第一个循环。 (每个标签必须有一个ID) 然后,您可以循环浏览标签,找到合适的标签并更新其文本属性
答案 2 :(得分:0)
您必须更改第二个代码:
for (int i = 0; i < dataGridView1.RowCount; i++)
{
labels[i].Text = dataGridView1.Rows[i].Cells["link"].FormattedValue.ToString();
}
您输入两个循环,并将网格值设置的最后一行输入到标签&#39;文本。