C# 从数组到数据表

C# 从数组到数据表,c#,asp.net,C#,Asp.net,好的,我现在看起来很简单,因为我有一个多维数组,我尝试使用以下代码填充我的数据表: System.Data.DataTable _myDataTable =new System.Data.DataTable(); for (int j=0; j < ele; j++) { _myDataTable.Columns.Add(); for (int i = 0; i < caract+1; i++) {

好的,我现在看起来很简单,因为我有一个多维数组,我尝试使用以下代码填充我的数据表:

System.Data.DataTable _myDataTable =new System.Data.DataTable();    
for (int j=0; j < ele; j++)
{       
        _myDataTable.Columns.Add();   

        for (int i = 0; i < caract+1; i++)
        {
            row[i]=(datar[j,i].ToString());

        }
        _myDataTable.Rows.Add(row);

}

我做错了什么?顺便说一句:我使用的是C#、asp.net,而不是Visual Studio。

正如chiffre所指出的那样,您实际上有3个问题:您必须先添加所有列,然后才能开始添加行;您必须先创建一个
数据行,然后才能将其添加到
数据表中。第三个问题是行维度计数器
caract+1
,它将产生IndexOutfrange异常

DataTable _myDataTable = new DataTable();

// create columns
for (int i = 0; i < ele; i++)
{
    _myDataTable.Columns.Add();
}

for (int j = 0; j < caract; j++)
{
    // create a DataRow using .NewRow()
    DataRow row = _myDataTable.NewRow();

    // iterate over all columns to fill the row
    for (int i = 0; i < ele; i++)
    {
        row[i] = datar[i, j];
    }

    // add the current row to the DataTable
    _myDataTable.Rows.Add(row);
}
DataTable\u myDataTable=newdatatable();
//创建列
for(int i=0;i
一些问题:

  • 您的代码不添加任何列
  • 您的代码不添加行
  • 一步一步地进行

  • 添加列

    //using System.Data
    DataTable _myDataTable = new DataTable();
    _myDataTable.Columns.Add(new DataColumn("Field_1"));
    _myDataTable.Columns.Add(new DataColumn("Field_2"));
    //...
    _myDataTable.Columns.Add(new DataColumn("Field_Ele"));
    
  • 添加行。您需要从myDataTable创建一个新的Datarow,用数据填充它,然后将其添加到表中:

    //assuming your data are stored in datar[,]
    String[,] datar = new String[max_i, max_j];
    for (int i = 0; i < ele; i++)
    {
        DataRow r = _myDataTable.NewRow();
        for (int j = 0; j < caract; j++)
        {
            //mind casting issues
            r[j] = datar[i, j];
        }
        _myDataTable.rows.add(r);
    }
    
    //假设您的数据存储在datar[,]
    字符串[,]datar=新字符串[max_i,max_j];
    for(int i=0;i
  • 有关详细信息,请参见。

    公共静态数据集多维ArrayToDataSet(字符串[,]输入)
    
    public static DataSet MultidimensionalArrayToDataSet(string[,] input)
    {
        var dataSet = new DataSet();
        var dataTable = dataSet.Tables.Add();
        var iFila = input.GetLongLength(0);
        var iCol = input.GetLongLength(1);
    
        //Fila
        for (var f = 1; f < iFila; f++)
        {
            var row = dataTable.Rows.Add();
            //Columna
            for (var c = 0; c < iCol; c++)
            {
                if (f == 1) dataTable.Columns.Add(input[0, c]);
                row[c] = input[f, c];
            }
        }
        return dataSet;
    }
    
    { var数据集=新数据集(); var dataTable=dataSet.Tables.Add(); var iFila=input.GetLongLength(0); var iCol=input.GetLongLength(1); //菲拉 对于(var f=1;f
    如果您有一个数组,其中第一行具有DataTable列名,则该数组有效

    public static System.Data.DataTable ArrayToDataTable(数组数组,bool headerQ=true)
    {
    if(array==null | | array.GetLength(1)==0 | | array.GetLength(0)==0)返回null;
    System.Data.DataTable dt=新的System.Data.DataTable();
    int dataRowStart=headerQ?1:0;
    //创建列
    对于(int i=1;i
    var dt=new DataTable();
    var iFila=VAL.GetLongLength(0);
    var iCol=VAL.GetLongLength(1);
    对于(var f=1;f对于(var c=1;c扩展方法如何

    static class HappyExtEnding
    {
        public static DataTable ToDataTable<T>(this T [] students)
        {
            if (students == null || students.Length == 0) return null;
    
            DataTable table = new DataTable();
            var student_tmp = students[0];
            table.Columns.AddRange(student_tmp.GetType().GetFields().Select(field => new DataColumn(field.Name, field.FieldType)).ToArray());
            int fieldCount = student_tmp.GetType().GetFields().Count();
    
            students.All(student =>
            {
                table.Rows.Add(Enumerable.Range(0, fieldCount).Select(index => student.GetType().GetFields()[index].GetValue(student)).ToArray());
                return true;
            });
    
            return table;
        }
    }
    
    静态类HappyExtEnding
    {
    公共静态数据表到数据表(此T[]学生)
    {
    if(students==null | | students.Length==0)返回null;
    DataTable=新的DataTable();
    var student_tmp=学生[0];
    table.Columns.AddRange(student_tmp.GetType().GetFields().Select(field=>newdatacolumn(field.Name,field.FieldType)).ToArray());
    int fieldCount=student_tmp.GetType().GetFields().Count();
    学生。全部(学生=>
    {
    table.Rows.Add(Enumerable.Range(0,fieldCount).Select(index=>student.GetType().GetFields()[index].GetValue(student)).ToArray();
    返回true;
    });
    返回表;
    }
    }
    
    用法

    Student[]学生={
    新学生{Id=1,Name=“Joe Rattz”,Address=“Sriram公寓”},
    新学生{Id=6,Name=“Ulyses Hutchens”,Address=“Sriram公寓”},
    新学生{Id=19,Name=“Bob Tanko”,Address=“Sriram公寓”},
    新学生{Id=45,Name=“Erin Doutensal”,Address=“Sriram公寓”},
    新学生{Id=1,Name=“Joe Rattz”,Address=“Sriram公寓”},
    新学生{Id=12,Name=“Bob Mapplethorpe”,Address=“Sriram公寓”},
    新学生{Id=17,Name=“Anthony Adams”,Address=“Sriram公寓”},
    新学生{Id=32,Name=“Dignan Stephens Mark”,Address=“Sriram公寓”},
    新学生{Id=1232,Name=“Dignan Stephens”,Address=“Sriram公寓Henry Labamba Beligi”},
    新学生{Id=132,Name=“Neha Dhupia”,Address=“Sriram公寓123456”},
    新学生{Id=132,Name=”,Address=“斯利拉姆公寓123456”},
    新学生{Id=133,Name=”,Address=“斯利拉姆公寓123456”},
    新学生{Id=134,Name=“Neha Dhupia”,Address=”“},
    新学生{Id=134,Name=“Shradha Kapoor”,Address=“孟买”}
    };
    //并行查询
    DataTable dtTmp=students.ToDataTable();
    
    什么是“ele”?什么是“caract”?什么是“row”?什么是“datar”?您的代码太混乱了…我想您应该阅读以下内容:
    我使用的是C#,asp.net,而不是Visual Studio。
    您确定的接缝,并且您确实了解每个产品:-/您是否尝试过先创建列,然后再创建行?因此您曾经在
    上迭代过,但忘记了这一点:在哪里实例化行?正如我看到的,行总是空的,你试着填充一个空行?!谢谢你这是我的问题,这是我使用的答案,再次感谢你我的问题的想法:这也行唯一的问题是添加,在这一部分中,我必须一个接一个地添加,但假设我有200个我不想写200次添加,它会的在for或whiley中更好您的表应该有数百列,不是吗?在while循环中如何指定正确的列名?在客户端中,他首先指定将有多少列(我没有,因为这与我的问题无关),而在添加c时
    
        public static System.Data.DataTable ArrayToDataTable(Array array, bool headerQ=true)
        {
            if (array == null || array.GetLength(1) == 0 || array.GetLength(0) == 0) return null;
            System.Data.DataTable dt = new System.Data.DataTable();
            int dataRowStart = headerQ ? 1 : 0;
    
            // create columns
            for (int i = 1; i <= array.GetLength(1); i++)
            {
                var column = new DataColumn();
                string value = array.GetValue(1, i) is System.String
                    ? array.GetValue(1, i).ToString() : "Column" + i.ToString();
    
                column.ColumnName = value;
                dt.Columns.Add(column);
            }
            if (array.GetLength(0) == dataRowStart) return dt;  //array has no data
    
            //Note:  the array is 1-indexed (not 0-indexed)
            for (int i = dataRowStart + 1; i <= array.GetLength(0); i++)
            {
                // create a DataRow using .NewRow()
                DataRow row = dt.NewRow();
    
                // iterate over all columns to fill the row
                for (int j = 1; j <= array.GetLength(1); j++)
                {
                    row[j-1] = array.GetValue(i,j);
                }
    
                // add the current row to the DataTable
                dt.Rows.Add(row);
            }
            return dt;
        }
    
            var dt = new DataTable();
            var iFila = vals.GetLongLength(0);
            var iCol = vals.GetLongLength(1);
    
            for (var f = 1; f < iFila; f++)
            {
                var row = dt.Rows.Add();
                for (var c = 1; c <= iCol; c++)
                {
                    if (f == 1) 
                        dt.Columns.Add(vals[1, c] != null 
                            ? vals[1, c].ToString() 
                            : "");
    
                    row[vals[1, c].ToString()] = vals[f, c];
                }
            }
    
    static class HappyExtEnding
    {
        public static DataTable ToDataTable<T>(this T [] students)
        {
            if (students == null || students.Length == 0) return null;
    
            DataTable table = new DataTable();
            var student_tmp = students[0];
            table.Columns.AddRange(student_tmp.GetType().GetFields().Select(field => new DataColumn(field.Name, field.FieldType)).ToArray());
            int fieldCount = student_tmp.GetType().GetFields().Count();
    
            students.All(student =>
            {
                table.Rows.Add(Enumerable.Range(0, fieldCount).Select(index => student.GetType().GetFields()[index].GetValue(student)).ToArray());
                return true;
            });
    
            return table;
        }
    }
    
    Student[] students = {
         new Student { Id = 1, Name = "Joe Rattz", Address = "Sriram Apartments" },
         new Student { Id = 6, Name = "Ulyses Hutchens", Address = "Sriram Apartments" },
         new Student { Id = 19, Name = "Bob Tanko", Address = "Sriram Apartments" },
         new Student { Id = 45, Name = "Erin Doutensal", Address = "Sriram Apartments" },
         new Student { Id = 1, Name = "Joe Rattz", Address = "Sriram Apartments" },
         new Student { Id = 12, Name = "Bob Mapplethorpe", Address = "Sriram Apartments" },
         new Student { Id = 17, Name = "Anthony Adams", Address = "Sriram Apartments" },
         new Student { Id = 32, Name = "Dignan Stephens Mark", Address = "Sriram Apartments" },
         new Student { Id = 1232, Name = "Dignan Stephens", Address = "Sriram Apartments Henry Labamba Beligi" },
         new Student { Id = 132, Name = "Neha Dhupia", Address = "Sriram Apartments 123456" },
         new Student { Id = 132, Name = "", Address = "Sriram Apartments 123456" },
         new Student { Id = 133, Name = "", Address = "Sriram Apartments 123456" },
         new Student { Id = 134, Name = "Neha Dhupia", Address = "" },
         new Student { Id = 134, Name = "Shradha Kapoor", Address = "Mumbai" }
     };
    
     //ParallelQuery<int>
    
     DataTable dtTmp = students.ToDataTable() ;