from array to datatable

后端 未结 6 559
星月不相逢
星月不相逢 2021-01-02 06:26

ok i now it supose to be simple y have a multidimensional array, I try to fill my data table using the following code:

System.Data.DataTable _myDataTable =ne         


        
相关标签:
6条回答
  • 2021-01-02 06:39

    As pointed out by chiffre you actually have 3 problems: You will have to add all columns before you can start to add rows and you will have to create a DataRow before you can add it to your DataTable. Your third problem is your row-dimension counter caract+1 which will yield an IndexOutOfRange exception.

    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);
    }
    
    0 讨论(0)
  • 2021-01-02 06:49
            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];
                }
            }
    
    0 讨论(0)
  • 2021-01-02 06:52

    Works if you have an array where the first row has the DataTable column name(s).

        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;
        }
    
    0 讨论(0)
  • 2021-01-02 06:53

    How about an extension method

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

    Usage

    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() ;
    
    0 讨论(0)
  • 2021-01-02 06:57

    Some issues:

    1. your code adds no column
    2. your code adds no row

    Proceed step by step.

    1. Adding columns.

      //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"));
      
    2. Adding rows. You need to create a new Datarow from _myDataTable, populate it with data, add it to the table:

      //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);
      }
      

    See here for details.

    0 讨论(0)
  • 2021-01-02 07:03
    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;
    }
    
    0 讨论(0)
提交回复
热议问题