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;ivar 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() ;