如何在新行的列表中显示每组数据?

时间:2019-02-25 18:56:39

标签: c# winforms loops datagridview

我有一个DataGridView,我想在其中从列表中将数据作为字符串加载。
我希望对列表中的每个数据集水平(转到下一列)而不是垂直(转到新行)加载数据。
DataGridView具有固定的列数,并且由于它是一个列表,所以行数取决于列表中的集合数。

我的代码出现的问题是,它没有替换列表的后续集合的新行,而是替换了列表中的第一组数据。
那么,如何在新行中显示每组数据?

我的代码:

private void Form1_VisibleChanged(object sender, EventArgs e)
{
    dataGridView2.ColumnCount = 9;

    for (int i = 0; i < dataGridView2.Columns.Count; i++)
    {
        foreach (string item in Class1.DTG2_list)
        {
            int counter = 0;
            if (item == string.Empty)
                dataGridView2.Rows[counter].Cells[i].Value = false.ToString();
            else
                dataGridView2.Rows[counter].Cells[i].Value = item;
            counter++;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

要在特定数量的列中显示List<string>中的DataGridView,可以创建具有该特定数量的列的DataTable,然后将数据添加到DataTable并在DataGridView中显示它们。

在下面的示例中,我假设我有一个List<string>,并且我想在DataGridView的4列中显示该列表:

//My test data
var list = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => (char)c).ToList();

//Create DataTable
var columnsCount = 4;
var datatable = new DataTable();
for (int i = 0; i < columnsCount; i++)
    datatable.Columns.Add($"C{i + 1}");

//Convert List<string> to DataTable having 4 columns
list.Select((x, i) => new { Value = x, Index = i })
    .GroupBy(x => x.Index / columnsCount).ToList()
    .ForEach(x => datatable.Rows.Add(x.Select(m => m.Value).Cast<object>().ToArray()));

//Show data in DataGridView
dataGridView1.DataSource = datatable;

enter image description here