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