C#行分隔文本文件到DataGrid单元格

时间:2013-07-07 03:39:55

标签: c# arrays datagrid text-files

我正在为我的电影制作业务构建一个WinForm应用程序,我将用它来输入我所有可用的人才信息。输入每个人才的信息并单击“添加记录”按钮后,文本框将全部添加到数据网格和文本文件中。我正在添加如下信息:

    public void AddToActorFile()
    {
        List<string> actorList = new List<string>();
        actorList.Add(midianTalent.Name);
        actorList.Add(midianActor.CharacterName);
        actorList.Add(midianActor.CastHeight);
        actorList.Add(midianActor.CastWeight);
        actorList.Add(midianActor.CastAge);
        actorList.Add(midianActor.CastSSN);
        actorList.Add(imageFileName);
        // B.
        string[] actorArray = actorList.ToArray();
        File.AppendAllLines(@"Cast.txt", actorArray);

        MessageBox.Show(cbPosition.SelectedItem + " Added to Cast File");
        AddActorToDataGrid();
    }

    public void AddActorToDataGrid()
    {
        actorDataGrid.Rows.Add(midianTalent.Name, midianActor.CastAge, midianActor.CastHeight, midianActor.CastWeight, midianActor.CastSSN, imageFileName);

    }

文本文件最后以行分隔,因此它读起来像这样

Actor1Info1
Actor1Info2
Actor1Info3
Actor1Info4
Actor1Info5
Actor1Info6
Actor2Info1
Actor2Info2
Actor2Info3

等等。 。 。所以每个演员有6个字段,一个接一个地写一个

然后我想关闭应用程序,当我重新打开它时,让文本文件自动使用每个actor的信息填充datagrid。 datagrid有6列,每行是1个actor,每列都包含相关信息。

以上所有方法都正常,但我无法弄清楚文本文件的读取。我使用以下方法

     public void ReadTalentFileData()
    {
        using (StreamReader fileReader = new StreamReader("Talent.txt"))
        {
            int column = 0;
            string fileLine;
            while ((fileLine = fileReader.ReadLine()) != null)
            {
                string[] cells = fileLine.Split('\n');
                talentDataGrid.Rows.Add();
                for (int i = 0; i < cells.Length; i++)
                {
                    talentDataGrid[column, i].Value = cells[i];
                }
                column++;

            }
        }
    }

第一个演员名单很好,但无论我放入多少演员,这是唯一出现的唱片,我的数据网格中还有额外的行是空白的。任何人都可以帮我找出我在readfile方法中出错的地方,以便每个actor都出现在datagrid中。

我也欢迎重构代码的提示。

我最终会将其更改为从我的在线MySQL数据库中读取和写入,因为我将让每个演员都使用此应用程序,但我想让这个本地副本正常工作,这样我就可以将每个人才的信息放在那里。然后我将文本文件导出到数据库,进行数据库所需的更改,然后将应用程序发布给我的人才。

1 个答案:

答案 0 :(得分:0)

我会将这些行加入逗号分隔值,而不是每个actor有6行。

var line = string.Join(",",  actorList);

接下来,您可以简单地阅读该文件,因为每一行都是一个演员。

foreach(var line in File.ReadLines("Talent.txt"))
{
    var columns = line.Split(',');
    talentDataGrid.Rows.Add(columns)
}