以编程方式创建多个数据表并构建类

时间:2017-11-01 21:09:07

标签: c#

我正在开展一个项目,我最终会打开多个文本文件。

然后,每个文本文件将被拆分为数据表。

我最初的想法是,我希望尽可能多地保留UI的代码,并且我应该使用公共方法OpenFile创建一个类DataSetClass。

DataSet将在此类中创建为全局,然后我用于对数据进行排序或从该特定数据集获取信息的所有其他函数将在该类中。但是,自从创建类以来,我相信我现在无法实际获取该数据,而是我应该创建一个新的DataSet,然后启动一个获取dataSet并通过添加表来修改它的类。但我担心这会让人羡慕吗?

除此之外,我正在努力解决如何将多个DataTable添加到DataSet的问题。

在我的代码中,在将所有相关数据放入DataSet后,我将DataTable添加到DataSet中。但是,我最终只是每次都将完全相同的DataTable添加到DataSet中,并且最终只有一个表。

for (int data_table = 1; data_table < header_location.Count; data_table++) {
    DataTable dt = new DataTable();

    SaveHeaderInfo(dt, header_location[data_table], split_data_list);
    SaveDataUntilStop(dt, start_location[data_table], split_data_list);

    dataSet.Tables.Add(dt);
    //dt.Reset();
}

使用dt.Reset行时,即使将表添加到数据集后,它也会擦除所有数据。

我认为这可能是因为.add函数实际上只是将指向表的指针插入到数据集中。那么我每次如何创建一个全新的数据表呢?

谢谢

编辑:添加额外代码:

private void SaveDataUntilStop(DataTable dt, int start, List<string[]> split_data_list)
    {
        string[] row = new string[400];
        for (int i = start + 1; i < split_data_list.Count; i++)
        {
            if (split_data_list[i][0] != "STOP")
            {
                for (int j = 0; j < split_data_list[i].Length; j++)
                    row[j] = split_data_list[i][j];
                CheckColumnCountAndAdd(dt, row);
            }
            else
                return;
        }
    }

    private void SaveHeaderInfo(DataTable dt, int location, List<string[]> list)
    {
        CheckColumnCountAndAdd(dt, list[location + 1]);
        CheckColumnCountAndAdd(dt, list[location + 2]);
    }

    private void CheckColumnCountAndAdd(DataTable dt, string[] str_to_add)
    {
        while (str_to_add.Length > dt.Columns.Count)
        {
            AddColumn(dt);
        }
        dt.Rows.Add(str_to_add);
    }

0 个答案:

没有答案