C# 如何转换列表<;T>;仅使用选定参数创建DataTable

C# 如何转换列表<;T>;仅使用选定参数创建DataTable,c#,list,listview,datatable,C#,List,Listview,Datatable,我有一个列表,其中指示器有几个属性 我有一个ListView,它以字符串列表的形式保存该类的选定属性 我希望仅使用listview中选定的属性从列表中创建DataTable 到目前为止,我可以使用listview中选定的参数为DataTable创建列。我被困在如何仅用选定列中的数据填充每一行上 for块是我被卡住的地方,我知道我有什么不对。谢谢你的帮助 internal DataTable ConvertToDataTableAll(List<Indicators> data)

我有一个
列表
,其中指示器有几个属性

我有一个ListView,它以字符串列表的形式保存该类的选定属性

我希望仅使用listview中选定的属性从列表中创建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);

            }

        }
    }

您需要为整个表添加一次列,而不是像现在这样为每一行添加列。所以应该这样做:

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);   
}

你试过这个吗?为什么不将for替换为:
foreach(data.Rows中的DataRow){row.Text=data.Select(x=>item.Text);table.Rows.Add(row);}
谢谢,是的,我想这是我的问题。但是,我的listviewFeatures.Columns为空。我使用从列表中选择的参数填充listviewFeatures.Items。feautres.items包含我要从列表提取到datatable的字符串中的列名。将包含所有参数的列表转换为datatable,然后删除我不需要的列,会更容易吗?为什么会更容易?我不知道,我的大脑只是不起作用。感谢您的帮助,我将编辑我的解决方案。如果此答案已回答您的问题,请执行。
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);   
}