これは、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 に読み戻すときに、名前を含む最初の行 (既に存在する) を読みたくありません。