我有List<Indicators>
指标有多个属性。
我有一个ListView,它将该类的选定属性保存为字符串列表。
我想使用列表视图中的选定属性从List创建一个DataTable。
到目前为止,我可以使用listview中的所选参数为DataTable创建列。我一直坚持如何用所选列中的数据填充每一行。
for
区块是我被困的地方,我知道我拥有的东西是不对的。感谢任何帮助。谢谢。
internal DataTable ConvertToDataTableAll(List<Indicators> data)
{
DataTable table = new DataTable();
foreach (ListViewItem item in listviewFeatures.Items)
{
table.Columns.Add(item.Text);
//this for block should fill the current column with data.
for (int i = 0; i < data.Count; i++)
{
var row = table.NewRow();
table.Rows.InsertAt(row, i);
table.Rows[i][item.Text] = data.Select(x => item.Text);
}
}
}
对CodingYoshis建议进行一些更改的解决方案。 这是在添加上面代码中的所有列并删除for块之后。
foreach(Indicators ind in data)
{
var row = table.NewRow();
foreach(PropertyInfo prop in ind.GetType().GetProperties())
{
if (table.Columns.Contains(prop.Name))
{
row[prop.Name] = prop.GetValue(ind);
}
}
table.Rows.Add(row);
}
答案 0 :(得分:0)
您需要为整个表添加一次列,而不是像您一样为每一行添加列。所以应该这样做:
var firstItem = listviewFeatures.Items.FirstOrDefault();
if (firstItem == null)
{
// Nothing to convert to datatable so return
return;
}
// We have items so lets initialize the table
DataTable table = new DataTable();
foreach (ColumnHeader header in listviewFeatures.Columns)
{
table.Columns.Add(header);
}
// Now lets add the rows
foreach (ListViewItem item in listviewFeatures.Items)
{
// Create one row per row in listview
var row = table.NewRow();
// Traverse the listview by each column and fill the row
foreach (ColumnHeader header in listviewFeatures.Columns)
{
row[header] = item.Text;
}
// Add row to table. It will add it to the end.
table.Rows.Add(row);
}