#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.