首页 > 解决方案 > 如何在新行中显示列表中的每组数据?

问题描述

我有一个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++;
        }
    }
}

标签: c#winformsloopsdatagridview

解决方案


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

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

//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;

在此处输入图像描述


推荐阅读