2017-10-13 228 views
0

我試圖從DataTable創建一個二維數組,但不是獲得下面定義的最終結果。一行不添加,如果添加該行,它將覆蓋列值。從數據表創建二維數組

下面是最終的結果,我希望得到:

[ 
     //columns 
['TaskID','TaskName','StartDate','EndDate','Duration','PercentComplete','Dependecies'], 

//rows 
     ['Cite','Create bibliography',null,1420649776903,1,20,'Research'], //missing row 
     ['Complete','Hand in paper',null,1420908976903,1,0,'Cite,Write'], 
     ['Outline','Outline paper',null,1420563376903,1,100,'Research'], 
     ['Research','Find sources',1420390576903,1420476976903,null,100,null], 
     ['Write','Write paper',null,1420822576903,3,25,'Research,Outline'] 
    ]; 

不過,我得到這個。

[ 
    ["TaskID","TaskName","StartDate","EndDate","Duration","PercentComplete","Dependecies"], 
    ["Complete","Hand in paper",null,1420908976903.0,1,0,"Cite,Write"], 
    ["Outline","Outline paper",null,1420563376903.0,1,100,"Research"], 
    ["Research","Find sources",1420390576903.0,1420476976903.0,null,100,null], 
    ["Write","Write paper",null,1420822576903.0,3,25,"Research,Outline"] 

] 

我曾嘗試:

// define the array size based on the datatable 
      object[,] multiDimensionalArry = new Object[breDataTable.Rows.Count, breDataTable.Columns.Count]; 
      const int columnsArryIndex = 0; 

      // populate array with column names 
      if (breDataTable.Columns.Count > 0 && breDataTable.Rows.Count > 0) 
      { 
       // loop around columns 
       for (int i = 0; i <= breDataTable.Columns.Count - 1; i++) 
       { 
        // add all the column names 
        multiDimensionalArry[columnsArryIndex, i] = breDataTable.Columns[i].ColumnName; 
       } 

      } 

      // outer loop - loop backwards from the bottom to the top 
      // we want to exit the loop, when index == 0 as that is reserved for column names 
      for (int j = breDataTable.Rows.Count - 1; j >= 0; j--) 
      { 
       // get current row items array to loop through 
       var rowItem = breDataTable.Rows[j].ItemArray; 

       // inner loop - loop through current row items, and add to resulting multi dimensional array 
       for (int k = 0; k <= rowItem.Length - 1; k++) 
       { 
         multiDimensionalArry[j, k] = rowItem[k]; 
       } 
      } 

回答

0

創建以來的列名行dosent數爲行

object[,] multiDimensionalArry = new Object[breDataTable.Rows.Count + 1, breDataTable.Columns.Count]; 

你的陣列,當你缺少一個行,你需要改變你的for循環要計入多餘的行數

// outer loop - loop backwards from the bottom to the top 
// we want to exit the loop, when index == 0 as that is reserved for column names 
for (int j = breDataTable.Rows.Count - 1; j >= 0; j--) 
{ 
    // get current row items array to loop through 
    var rowItem = breDataTable.Rows[j].ItemArray; 

    // inner loop - loop through current row items, and add to resulting multi dimensional array 
    for (int k = 0; k <= rowItem.Length - 1; k++) 
    { 
     multiDimensionalArry[j + 1, k] = rowItem[k]; 
    } 
} 
+0

感謝這就是我想要做的,週五晚上讓我的腦子油然而生:) – Haris

+1

@Haris哈哈你不客氣:) – CNuts