从数据表创建2D数组

时间:2017-10-13 17:09:41

标签: c#

我正在尝试从DataTable创建一个2D数组,但不是在下面定义最终结果。未添加一行,如果添加该行,则会覆盖列值。

以下是我希望获得的最终结果:

    [
        //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];
                }
            }

1 个答案:

答案 0 :(得分:0)

创建数组时缺少一行,因为列名称rownt计为行

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