Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET MVC将字符串转换为数据表_C#_Asp.net Mvc_Datatable - Fatal编程技术网

C# 使用ASP.NET MVC将字符串转换为数据表

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

我正在尝试使用ffollowing方法将字符串转换为DataTable,但没有成功

包含数据字符串的代码:

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