Как программно вставить строки в CSV-файл в зависимости от количества конкретной записи - PullRequest
0 голосов
/ 22 марта 2019

У меня есть программа, которая выполняет запрос SQL и возвращает данные в таблицу данных.

DataGridView Example

Затем я записываю данные в файл csv, которыйработает отлично.

enter image description here

Однако мне нужно добавить строку в CSV для каждого элемента на основе количества записи.Первая запись (выделена синим цветом) имеет количество 12, поэтому мне нужно вставить 12 строк, содержащих информацию из первой записи, и так далее вниз по списку.

Вот что я хотел бы показать: enter image description here

Ниже приведен код, который я использую для создания файла CSV.

string strValue = string.Empty;
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
    for (int j = 0; j < dataGridView1.Rows[i].Cells.Count; j++)
    {
        if (!string.IsNullOrEmpty(dataGridView1[j, i].Value.ToString()))
        {
            if (j > 0)
                strValue = strValue + "," + dataGridView1[j, i].Value.ToString();
            else
            {
                if (string.IsNullOrEmpty(strValue))
                    strValue = dataGridView1[j, i].Value.ToString();
                else
                    strValue = strValue + Environment.NewLine + dataGridView1[j, i].Value.ToString();
            }
        }
    }
}

string strFile = @"\\\\Path_To_CSV\\DynamicsPartsLabels.csv";
if (File.Exists(strFile) && !string.IsNullOrEmpty(strValue))
{
    File.WriteAllText(strFile, strValue);
}

Есть ли способ прочитать последний столбец в datagridview (Количество) и создать строку в CSV для каждой записи на основе числа в этом столбце?

1 Ответ

0 голосов
/ 22 марта 2019

Попробуйте изменить код на:

 StringBuilder rows = new StringBuilder();
 var row = string.Empty;
 for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
 {
    row = string.Join(",", dataGridView1.Rows[i].Cells.Cast<DataGridViewCell>().Select(x => x.Value));
    int.TryParse(dataGridView1.Rows[i].Cells["Quantity"].Value?.ToString(), out var quantity);
    for (int q = 0; q < quantity; q++)
    {
       rows.AppendLine(row);
    }      
 }
 var strValue = rows.ToString();
...