【问题标题】:DataTable remove columns and re-order the columnsDataTable 删除列并重新排序列
【发布时间】:2016-04-27 02:33:30
【问题描述】:

我想从数据表中删除不需要的列并按预定义的顺序排列列的顺序

例如,我的表格列如下,

 Col2|Col1|Col3|Test|Test1|Col5|Col4|Some col name|Col6

我想删除 Test、Test1 和 Some col 名称并按数据表重新排序为以下格式

Col1|Col2|Col3|Col4|Col5|Col6

// I need the below columns
List<string> tableColumns = new List<string>();
tableColumns.Add("Col1");
tableColumns.Add("Col2");
tableColumns.Add("Col3");
tableColumns.Add("Col4");
tableColumns.Add("Col5");
tableColumns.Add("Col6");

List<DataColumn> tblColumns = MyDataTable.Columns.Cast<DataColumn>().ToList();

//Remove unwanted columns
foreach (DataColumn col in tblColumns)
{
  if (!tableColumns.Contains(col.ColumnName.Trim()))
  {
   MyDataTable.Columns.Remove(col);
  }
}

现在如何按以下顺序重新排列列?

Col1|Col2|Col3|Col4|Col5|Col6

我在下面的代码中尝试过,但是如果 tableColumns 中的所有项目都不存在于数据表中,则它会失败。 有时数据表列名也有一些空格(例如“Col1”)

foreach (var col in tableColumns)
{

     MyDataTable.Columns[col].SetOrdinal(tableColumns.IndexOf(col));

}

删除不需要的列并重新排列列的最佳方法是什么?

【问题讨论】:

    标签: c# linq datatable datacolumn reorderlist


    【解决方案1】:

    我认为您的列可能具有随机顺序,例如 Col2、Col1、Col3。并且您想要重新排列和删除不需要的列,例如 Col1、Col2、Col3。

    string[] srr = new string[]{"Col2","Col1","Col3","Test","Test1","Col6","Col4","Some col name","Col5"};
    
    DataTable MyDataTable = new DataTable();
    
    foreach(string col in srr)
    {
        MyDataTable.Columns.Add(col);               
    }
    
    List<string> arrayNames = (from DataColumn x in MyDataTable.Columns
                          select x.ColumnName).ToList();
    
    foreach(var col in arrayNames)
    {
        if(!col.Contains("Col"))
        {
            MyDataTable.Columns.Remove(col);            
        }
        else
        {
            int result = Convert.ToInt32(Regex.Match(col.ToString(), @"\d+$").Value);
            MyDataTable.Columns[col].SetOrdinal(result-1);          
        }
    }
    

    这将删除像 Test,Test1,some col name ie 这样的列。没有单词“Col”的列(根据您的程序更改逻辑)。然后通过使用正则表达式,它将从列名中提取数字。即“Col1”中的1,然后根据它重新排列列。

    【讨论】:

      【解决方案2】:

      删除不需要的列后,您可以按以下方式对它们进行排序:

      int index = 0;
      
      foreach (var col in
          MyDataTable.Columns
          .Cast<DataColumn>()
          .OrderBy(x => tableColumns.IndexOf(x.ColumnName))
          .ToList())
      {
          col.SetOrdinal(index);
          index ++;
      }
      

      这会从DataTable 中选择列,并按照它们在tableColumns 列表中的对应索引对它们进行排序。

      然后它在每一个上调用SetOrdinal,每次递增索引。

      【讨论】:

        猜你喜欢
        • 2012-10-07
        • 2013-08-08
        • 1970-01-01
        • 2017-04-19
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        相关资源
        最近更新 更多