2012-06-01 52 views
1

我一直在試圖將一個excel文檔和很多工作表合併到一個Datatable中,以便我可以在我的winform應用程序中顯示上述工作表。DataTable importRow()到空表

從閱讀中,我發現Datatable.import(DataRow行)是我最好的選擇。因此,我的代碼如下:

DataTable returnSet = new DataTable(); 
foreach (DataTable datTab in ds.Tables) // ds is extracted excel sheets in a dataset 
{ 
    foreach (DataRow datRow in datTab.Rows) 
    { 
    if (datRow.IsNull(0)) //if empty first col go on to next sheet 
    { 
     break; 
    } 
    else 
    { 
     returnSet.ImportRow(datRow); 
    } 
    } 
} 

調試時,它表明datRow/datTab是什麼,我希望它是,但每種ImportRow後,returnSet仍然是一個空的1x1細胞。任何有關我做錯了/失蹤的見解將不勝感激。

回答

10

我假設原因是因爲你的DataTable目前沒有模式。您可以嘗試克隆原始DataTable以創建相同的模式(DataColumns等)。

foreach (DataTable datTab in ds.Tables) // ds is extracted excel sheets in a dataset 
{ 
    DataTable tblClone = datTab.Clone(); 
    foreach (DataRow datRow in datTab.Rows) 
    { 

     if (datRow.IsNull(0)) //if empty first col go on to next sheet 
     { 
      break; 
     } 
     else 
     { 
      tblClone.ImportRow(datRow); 
     } 
    } 
} 
+1

他想要在DataTable循環之外聲明tblClone DataTable,可能使用DataSet中的第一個DataTable作爲模板。 –

+1

@JayRiggs:什麼意思_template_?他想跳過不適合第一個表的所有DataColumns嗎? –

+0

是的,我想返回tblClone,但這是一個簡單的修復。謝謝您的幫助。只是一個簡短的事情,有什麼辦法可以簡單地連接在一個行上?當我測試迭代上面表格的多個數據表和多個數據行時,似乎當前行必須與原始模式完全匹配,否則它不會將當前行添加進去。(我用3個excel表單進行測試,每個表格都有一個但有一列有3列數據,另一列有4列,另一列有5列,只有3列列出現,儘管它們在ds中顯示爲正確解析。) –