Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 将文本文件上载到数据表_C#_Datatable_Datagridview - Fatal编程技术网

C# 将文本文件上载到数据表

C# 将文本文件上载到数据表,c#,datatable,datagridview,C#,Datatable,Datagridview,我试图允许用户将现有信息上传到数据表。以下是上传的代码: private void label30_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { StreamReader read

我试图允许用户将现有信息上传到数据表。以下是上传的代码:

private void label30_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                StreamReader read = new StreamReader(File.OpenRead(ofd.FileName));
                string[] lines = File.ReadAllLines(ofd.FileName);
                string[] values;

                for (int i = 31; i < lines.Length; i++)
                {
                    values = lines[i].ToString().Split(',');
                    string[] row = new string[values.Length];

                    for (int j = 0; j < values.Length; j++)
                    {
                        row[j] = values[j].Trim();
                    }
                    stkSheetdgv.Rows.Add(row);
                    read.Close();
                    read.Dispose();
                }
                
            }
        }

解决此问题有两种不同的方法,一种是删除
数据源的分配(例如,删除
stkSheetdgv.DataSource=dt;
),另一种是明确添加到
数据源中:

代码

private void label30_Click(object sender, EventArgs e)
{
    DataTable dataTable = (DataTable)stkSheetdgv.DataSource;
    OpenFileDialog ofd = new OpenFileDialog();
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        using (StreamReader read = new StreamReader(File.OpenRead(ofd.FileName)))
        {
            string[] lines = File.ReadAllLines(ofd.FileName);
            string[] values;

            for (int i = 31; i < lines.Length; i++)
            {
                values = lines[i].ToString().Split(',');
                var dataRow = dataTable.NewRow();
                for (int j = 0; j < values.Length; j++)
                {
                    dataRow[j] = values[j].Trim();
                }
                dataTable.Rows.Add(dataRow);
                dataTable.AcceptChanges();
            }
        }
    }
}

这对我来说非常好。

您需要先添加一个,为新行赋值,然后添加到
数据表中。
。请进一步查看。@Hayden您能告诉我代码是如何执行的吗?您能提供如何初始化stkSheetdgv(带列和全部)吗以及csv的格式。提供信息时,请编辑问题,然后标记我。它现在在
dataRow[j]=values[j].Trim()处出错错误显示为System.IndexOutOfRangeException:“找不到第9列”。
private void label30_Click(object sender, EventArgs e)
{
    DataTable dataTable = (DataTable)stkSheetdgv.DataSource;
    OpenFileDialog ofd = new OpenFileDialog();
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        using (StreamReader read = new StreamReader(File.OpenRead(ofd.FileName)))
        {
            string[] lines = File.ReadAllLines(ofd.FileName);
            string[] values;

            for (int i = 31; i < lines.Length; i++)
            {
                values = lines[i].ToString().Split(',');
                var dataRow = dataTable.NewRow();
                for (int j = 0; j < values.Length; j++)
                {
                    dataRow[j] = values[j].Trim();
                }
                dataTable.Rows.Add(dataRow);
                dataTable.AcceptChanges();
            }
        }
    }
}
AAC 1/0 POPPY,30C4 CCA,C1-LD,E1-5-144,F1-2 Expansion,G311-15kVA,M2-12,M8-60-10',M5-5LD
AAC 477 COSMOS,30C5 CCA,C2-LD,E1-5-144P,F1-2 Plate,G311-25kVA,M2-11,M8-100-10',M5-5HD