1

これは、datagridview によって保存された私のファイル (test.csv) です。以下のコードはファイルを読み取り、すべての値を datagridview に貼り付けます。

InitializeComponent();
try
{
   //gbSeries.Enabled = false;
   //AssignValues();
   //btnSave.Enabled = true;

   // read and insert a new line
   System.IO.StreamReader csv_file = File.OpenText("c:/test.csv");

   while (csv_file.Peek() >= 0)
   {
      // read and add a line
      string line = csv_file.ReadLine();
      string[] vals = line.Split(';');

      dataGridView1.Rows.Add(new object[] 
      { 
         vals[0],
         vals[1],
         vals[2],
         vals[3],
         vals[4],
         vals[5],
         vals[6],
         vals[7]
         //cansim,
         //freeze });
      });
   }
   csv_file.Close();
}

データグリッド ビュー データを次のように保存します。

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        System.IO.StreamWriter csvFileWriter = new StreamWriter(CsvFpath, false);
        string columnHeaderText = "";
        int countColumn = dataGridView1.ColumnCount - 1;

        if (countColumn >= 0)
        {
            columnHeaderText = dataGridView1.Columns[0].HeaderText;
        }

        for (int i = 1; i <= countColumn; i++)
        {
            columnHeaderText = columnHeaderText + ';' + dataGridView1.Columns[i].HeaderText;
        }

        csvFileWriter.WriteLine(columnHeaderText);
        foreach (DataGridViewRow dataRowObject in dataGridView1.Rows)
            dataGridView1.Rows = 1;
        {
            if (!dataRowObject.IsNewRow)
            {
                string dataFromGrid = "";
                dataFromGrid = dataRowObject.Cells[0].Value.ToString();

                for (int i = 1; i <= countColumn; i++)
                {
                    dataFromGrid = dataFromGrid + ';' + dataRowObject.Cells[i].Value.ToString();
                }
                csvFileWriter.WriteLine(dataFromGrid);
            }
        }
        csvFileWriter.Flush();
        csvFileWriter.Close();
    }
    catch (Exception exceptionObject)
    {
        MessageBox.Show(exceptionObject.ToString()); // If I don't have a value in the column then it throws exception. I don't want that. 
    }
}

列の名前を含む最初の行は、一度だけ保存したいだけです。問題は、毎回 datagridview を編集して保存することです。列の名前を含む最初の行 (前に述べたように) が 2 回来て、何度も編集すると、毎回行名 + 1 が大きくなります。

first time:
Row names ---------
data --------------

After editing:

Row names ---------
Row names ---------
data --------------

After editing:

Row names ---------
Row names ---------
Row names ---------
data --------------

データを保存する前に、すべての datagridview 列に値が必要です。しかし、空の列でもデータを保存したいのですが、何かできることはありますか?? 空の列があると例外がスローされ、すべてのデータが失われます!

MessageBox.Show(exceptionObject.ToString()); // If I don't have a value in the column then it throws exception. I don't want that.

毎回ではなく、最初の行/行を一度保存​​するにはどうすればよいですか。そして、ファイルを datagridview に読み戻すときに、名前を含む最初の行 (既に存在する) を読みたくありません。

4

0 に答える 0