C# 使用ASP.NET MVC将字符串转换为数据表
我正在尝试使用ffollowing方法将字符串转换为DataTable,但没有成功 包含数据字符串的代码:C# 使用ASP.NET MVC将字符串转换为数据表,c#,asp.net-mvc,datatable,C#,Asp.net Mvc,Datatable,我正在尝试使用ffollowing方法将字符串转换为DataTable,但没有成功 包含数据字符串的代码: StringWriter sw = new StringWriter(); sw.WriteLine("\"NumClient\",\"Raisons Sociale\",\"DateDocument\",\"NumCommandeNAV\",\"Réference\",\"Designation\",\"QteCommandée\",\"QteLi
StringWriter sw = new StringWriter();
sw.WriteLine("\"NumClient\",\"Raisons Sociale\",\"DateDocument\",\"NumCommandeNAV\",\"Réference\",\"Designation\",\"QteCommandée\",\"QteLivrée\",\"QteAnnulée\",\"Reste à Livrer\",\"Type Disponibilite\",\"DateDisponibilite\"");
var EnTete =
db.AURES_GROS_EnTeteCommande.Where(e => e.NumCommandeNAV != " " && e.NumCommandeNAV != "_")
.OrderBy(x => x.CodeMagasin)
.ThenBy(s => s.NumClient)
.ThenBy(c => c.DateDocument)
.OrderByDescending(x => x.NumCommandeNAV)
.ToList();
foreach (var element in EnTete)
{
string statut = RecuperStatut(element.NumCommandeNAV);
if (statut == "A livrer")
{
Raison = context.Users.First(x => x.No_ == element.NumClient).RaisonSociale;
lignes = db.AURES_GROS_LigneCommande.Where(x => x.NumDocument == element.NumDocument).ToList();
foreach (var elt in lignes)
{
sw.WriteLine(string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\",\"{7}\",\"{8}\",\"{9}\",\"{10}\",\"{11}\"",
element.NumClient,
Raison,
element.DateDocument,
element.NumCommandeNAV,
elt.CodeArticle,
elt.Designation,
elt.Quantite,
0,
elt.QteANNULEE,
elt.Quantite,
element.Couleur,
elt.DateDisponibilite
));
}
}
}
DataTable t = convertStringToDataTable(sw.ToString());
Response.ClearContent();
Response.ClearHeaders();
Response.BufferOutput = true;
Response.ContentType = "text/excel";
Response.AddHeader("Content-Disposition", "attachment; filename=Reliquat" + DateTime.Now.ToString("yyyy_MM_dd") + ".csv");
Response.Write(t);
Response.Flush();
Response.Close();
//Response.End();
在这段代码中,我希望我wnat将数据导出到Excel文件
任何人都有解决办法
谢谢,我认为您希望从字符串创建一个DataTable。因此,首先拆分“行”,然后拆分“列”。您将在行循环中添加DataColumns。在循环之前只需添加一次。下面是另一个实现,它处理此情况和您尚未考虑的其他边缘情况:
public static DataTable ConvertStringToDataTable(string data)
{
DataTable dataTable = new DataTable();
// extract all lines:
string[] lines = data.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
string header = lines.FirstOrDefault();
if (header == null)
return dataTable;
// first create the columns:
string[] columns = header.Split(','); // using commas as delimiter is brave ;)
foreach (string col in columns)
dataTable.Columns.Add(col.Trim());
foreach (string line in lines.Skip(1))
{
string[] fields = line.Split(',');
if(fields.Length != dataTable.Columns.Count)
continue; // should not happen
DataRow dataRow = dataTable.Rows.Add();
for (int i = 0; i < fields.Length; i++)
dataRow.SetField(i, fields[i]);
}
return dataTable;
}
公共静态数据表ConvertStringToDataTable(字符串数据)
{
DataTable=新的DataTable();
//提取所有行:
string[]line=data.Split(新字符串[]{“\r\n”,“\n”},StringSplitOptions.RemoveEmptyEntries);
字符串头=行。FirstOrDefault();
if(头==null)
返回数据表;
//首先创建列:
string[]columns=header.Split(',');//使用逗号作为分隔符是勇敢的;)
foreach(列中的字符串列)
dataTable.Columns.Add(col.Trim());
foreach(行中的字符串行。跳过(1))
{
string[]fields=line.Split(',');
if(fields.Length!=dataTable.Columns.Count)
continue;//不应该发生
DataRow DataRow=dataTable.Rows.Add();
for(int i=0;i
您可以将列foreach转换为for循环
public static DataTable convertStringToDataTable(string data)
{
DataTable dataTable = new DataTable();
bool columnsAdded = false;
foreach (string row in data.Split('\n'))
{
DataRow dataRow = dataTable.NewRow();
string[] cell = row.Split(',');
for (int i = 0; i < cell.Length; i++)
{
string[] keyValue = cell[i].Split('"');
if (!columnsAdded)
{
DataColumn dataColumn = new DataColumn();
dataTable.Columns.Add(dataColumn);
}
dataRow[i] = keyValue[1];
}
columnsAdded = true;
dataTable.Rows.Add(dataRow);
}
return dataTable;
}
公共静态数据表convertStringToDataTable(字符串数据)
{
DataTable=新的DataTable();
bool columnsAdded=false;
foreach(data.Split('\n')中的字符串行)
{
DataRow DataRow=dataTable.NewRow();
string[]cell=row.Split(',');
for(int i=0;i
但是,如果您的拆分字符串[]keyValue=cell.split(“”);没有返回您期望的结果,您可能需要进一步调查。您的意思是什么不起作用,有错误吗?我得到了“System.ArgumentException”:列“”不属于该表;堆栈溢出不能替代调试器。在调试时,特别是在何处发生此错误?发生时的运行时值是什么?为什么要查找名称为空字符串的列?问题是在这一行
keyvalue[1]
是empty
。调试代码。您将很容易理解代码中的问题。调试后,我发现DataColumn DataColumn=new DataColumn(keyValue[0]);始终返回null,即使keyValue[0]不保留有关分隔符的注释,我相信他们稍后会发现。感谢Tim的回复,我遇到了一个异常,我正在尝试修复it@Sarra当前位置如果你能提出来,我会尽力帮你的。非常感谢蒂姆,我是英语初学者,也许我能“我不能很好地表达,对不起misunderstood@Sarra字体不,你误解我了。如果你提到这个异常,我会尝试修复它。什么是异常消息,什么是堆栈跟踪(包括行号)。感谢Scrobi回复帮助我的数据
public static DataTable convertStringToDataTable(string data)
{
DataTable dataTable = new DataTable();
bool columnsAdded = false;
foreach (string row in data.Split('\n'))
{
DataRow dataRow = dataTable.NewRow();
string[] cell = row.Split(',');
for (int i = 0; i < cell.Length; i++)
{
string[] keyValue = cell[i].Split('"');
if (!columnsAdded)
{
DataColumn dataColumn = new DataColumn();
dataTable.Columns.Add(dataColumn);
}
dataRow[i] = keyValue[1];
}
columnsAdded = true;
dataTable.Rows.Add(dataRow);
}
return dataTable;
}