C# 如何将dataGrid列输出到标签?

C# 如何将dataGrid列输出到标签?,c#,winforms,datagridview,datagrid,label,C#,Winforms,Datagridview,Datagrid,Label,我只是想输出一列dataGridView控件。第一个代码如下所示,它创建标签并将它们添加到列表和表单中,一切正常。但是第二个,它不起作用。如何输出到标签 public List<Label> labels; private void cmdBot_Click(object sender, EventArgs e) { labels = new List<Label>(); for (int i = 0; i <

我只是想输出一列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();
            }
        }
    }

您似乎在第二个函数中有一个额外的循环,它将导致为DataGrid中的每一行设置每个标签。但是,由于您没有确切说明它是如何工作的,我对您可能想要的唯一猜测是,第二个方法被转换为第一个方法中的一个额外行,但是如果您不想:

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

Label gecoLabel = new Label();
gecoLabel.Text = "test label";
gecoLabel.ID = "lbl" + i.ToString();
将该行添加到第一个循环。每个标签必须有一个ID
然后,您可以在标签中循环查找合适的标签并更新其文本属性

您必须更改第二个代码,如下所示:

for (int i = 0; i < dataGridView1.RowCount; i++)
{
            labels[i].Text = dataGridView1.Rows[i].Cells["link"].FormattedValue.ToString();
}

在标签文本中输入两个循环和网格值设置的最后一行。

为什么要标记[wpf]?-该代码不是WPF,而是winforms。click小姐,很抱歉。是的,该代码正在工作。每一行指向不同的标签。但在使用我的代码时,只有dataGrid的最后一行指向所有标签。我需要使用第二个函数来实现这一点,谢谢你。你给了每个标签一个唯一的ID吗?你可以添加一个断点或一些调试MessageBox的东西,告诉你在你的集合中有多少个标签,并在必要时通过它们循环…不,我没有,我不想这样做,因为每个标签都有事件。按照我的方式,有很多标签使用相同的事件函数。没有办法不分配ID值,但是如果您试图避免出现大量额外的调试弹出窗口,为什么不使用调试器逐步执行该方法呢?或者,您可以使用局部变量,如标签计数的int和文本值的列表,然后在UI中显示这些变量,仅用于测试/调试目的。我已经知道这一点,但如果可能的话,我需要使用我的方式。