如何从另一个数据表的行向数据表添加列

时间:2017-11-08 10:44:41

标签: c# arrays datatable

我有一个名为youtube-dl -f 93 --external-downloader ffmpeg --external-downloader-args\ "-hide_banner -reconnect 1 -reconnect_at_eof 1 \ -reconnect_streamed 1 -reconnect_delay_max 2 \ -fflags +genpts -user-agent proxy5 \ -c copy -sn -dn -hls_time 8 -hls_list_size 3000 \ -hls_wrap 80000 -hls_allow_cache 30 -hls_flags delete_segments i.m3u8" \ https://www.youtube.com/watch?v=8t3YhjKEYhw 的DataTable,它填充了excel的值。

  

在第6行(行)我有我的标题信息

我现在有代码

ffmpeg -re -i $(youtube-dl -f 93 -g 8t3YhjKEYhw ) \
-hide_banner -reconnect 1 -reconnect_at_eof 1 \
-reconnect_streamed 1 -reconnect_delay_max 2 \
-fflags +genpts -user-agent proxy5 -c copy -sn -dn \
-hls_time 8 -hls_list_size 3000 -hls_wrap 80000 \
-hls_allow_cache 30 -hls_flags delete_segments i.m3u8

我需要的是:

  
      
  1. 我希望第6行的所有数据都成为新DataTable中的标题
  2.   
  3. 第7行之后的所有数据我需要使用新标题追加到这个新的数据表。
  4.   

我的代码显示的内容:

我的代码现在展示了如何在克隆的DataTable上执行此操作,因此我的错误是headernames。

3 个答案:

答案 0 :(得分:1)

如果您只需要其中一行,则无需遍历所有行。

DataTable dtSource = new DataTable();
DataTable dtTarget = new DataTable();

// Get row at index == 6 (7th line as this is a 0-based-index)
var headerRow = dtSource.Rows[6];

// Iterate through all values
foreach(var value in headerRow.ItemArray)
{
    // For each value create a column
    // and add it to your new dataTable
    DataColumn dc = new DataColumn(value.ToString());
    dc.Caption = value.ToString();
    dtTarget.Columns.Add(dc);
}

答案 1 :(得分:1)

使用linq方法可能会很好: 伪方式:

 //linq query to select row 
 var query = from myRow in
 myDataTable.AsEnumerable() where myRow.Field<int>("RowNo") == 6 
 select myRow;

// Create a table from the query DataTable newTable =
query.CopyToDataTable<DataRow>();

答案 2 :(得分:0)

你的问题读起来很混乱,并且一直在谈论我期望列等的行,但我会做出以下假设:

  • 你有一个excel文件,其中包含5个空白行,然后是一行标题,然后是数据行
  • 您已成功将此数据导入名为dt的数据表
  • 您希望最终得到一个数据表,该数据表的第6行中的值为列名,并删除了空白行

代码:

for(int i = 5; i >= 0; i--){
  if(i == 5)
  {
    for(int j = 0; j < dt.Columns.Count; j++)
      dt.Columns[j].ColumnName = dt.Rows[i][j].ToString();
  }
  dt.Rows.RemoveAt(i);
}

您不需要克隆数据表。注意那些导致列名不佳的字符串(包含像'[')这样的字符会让你的生活更加悲惨。