c# - 如何在新行中显示列表中的每组数据?
问题描述
我有一个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++;
}
}
}
解决方案
要在特定数量的列中显示一个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;
推荐阅读
- corda - 为第 3 方类扩展 Corda 序列化
- html - 如何使用 JSF 和 Primefaces 显示 HEIGHT 变量 FIX 标题面板?
- angular5 - 从 RxJS5 升级到 RxJS6
- wordpress - 警告:count():参数必须是数组或实现 Countable 的对象
- java - 使用流初始化对象
- php - Laravel 注册用户创建群组
- awk - 从 nslookup grep 所有 IP 地址
- activerecord - Statesman Gem with Rails 5 - ActiveRecord 转换没有发生
- push-notification - 更新 PUSH_DEVICES 表中的 UserID 和 PhoneNumber
- bash - 获取两个给定变量字符串之间的内容