Добавление имени файла и безопасного имени файла в DataGridView

#datagridview #openfiledialog

#datagridview #openfiledialog

Вопрос:

Кажется, что это должно быть просто. У меня есть программа, которая выводит имя файла и путь к файлу в двух отдельных столбцах, когда я использую OpenFileDialog. Я использую инструкцию foreach, которая добавляет строку для каждого файла, выбранного в OpenFileDialog (обратите внимание, я использую множественный выбор в моем ofd).

Когда я выбираю один файл, все работает отлично, потому что в массиве есть только 1 имя файла (строка). Однако, когда я выбираю 2 файла, в мой DataGridView добавляются четыре строки. Я знаю, что мне не следует использовать 2 foreach оператора с dataGridView1.Rows.Add функцией.

Есть ли простой способ добавить массив в столбец без использования Add части dataGridView1.Rows.Add ? Я хочу добавить строку в каждую ячейку третьего столбца (из моего массива OpenFileDialog), но без добавления строки каждый раз.

  private void button1_Click(object sender, EventArgs e)
        {
            ofd.Filter = "*.SFP, *.SFL|*.sfp; *.sfl";
            ofd.Multiselect = true;


        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string[] selectedFiles = ofd.SafeFileNames;
            string[] filePaths = ofd.FileNames;

            foreach (string selectedFile in selectedFiles)
            foreach (string filePath in filePaths)
            {
                dataGridView1.Rows.Add(selectedFile, "", filePath);
            }
        }
    }
  

введите описание изображения здесь

Я также попробовал следующее и получил результаты на скриншоте ниже:

     private void button1_Click(object sender, EventArgs e)
    {
        ofd.Filter = "*.SFP, *.SFL|*.sfp; *.sfl";
        ofd.Multiselect = true;


        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string[] selectedFiles = ofd.SafeFileNames;
            string[] filePaths = ofd.FileNames;

            foreach (string selectedFile in selectedFiles)
            {
                dataGridView1.Rows.Add(selectedFile);
            }
            foreach (string filePath in filePaths)
            {
                dataGridView1.Rows.Add("", "", filePath);
            }
        }
    }
  

введите описание изображения здесь

Я действительно думаю, что это что-то простое. Здесь новый программист. Спасибо за любую помощь.

Ответ №1:

 openFileDialog1.Multiselect = true;
        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string[] selectedFiles = openFileDialog1.SafeFileNames;
            string[] filePaths = openFileDialog1.FileNames;
            for (int i = 0; i < openFileDialog1.FileNames.Count() - 1; i  )
            {
                dataGridView1.Rows.Add(selectedFiles[i], filePaths[i]);
            }
        }
  

Комментарии:

1. Возможно, вы захотите объяснить свой код. Это очень поможет пользователям SO.