Добавить результаты сделать datagridview - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь создать приложение, которое находит все изображения в определенной папке (например, CR7), а не во всех каталогах. У меня есть общий сетевой ресурс и много каталогов, где я могу найти эту конкретную папку «CR7». Мне нужны только изображения из этой папки CR7. Я могу найти их и пытаюсь представить эти результаты в обзоре данных, но безуспешно. Есть идеи, почему filesList не попадает в Dataatable? Вот код:

{
    public partial class FormProcuraFotos : Form
    {
        DataTable tableWithPhotos;
        public FormProcuraFotos()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Visible = true;
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += this.Worker_DoWork;
            worker.RunWorkerCompleted += this.Worker_RunWorkerCompleted;
            worker.RunWorkerAsync();
        }
        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            // Create the new DataTable to be used
            tableWithPhotos = new DataTable();
            //Find files on a specific folder (CR7)
            string allDir = @"\\share\folder01";
            var CR7Directories = Directory.EnumerateDirectories(allDir, "CR7", SearchOption.AllDirectories);
            List<string> extensions = new List<string>() { ".jpg", ".bmp", ".png", ".tiff", ".gif" };
            List<string> filesList = new List<string>();
            foreach (var dir in CR7Directories)
            {
                List<string> FileNames = new DirectoryInfo(dir).EnumerateFiles(dir)
                                                               .Where(x => extensions.Contains(x.Extension))
                                                               .Select(x => x.Name).ToList();
                filesList.AddRange(FileNames);
            }
            // And now here we will add all the files that it has found into the DataTable
            foreach (string entryFiles in filesList)
            {
                DataRow row = tableWithPhotos.NewRow();
                row[0] = Path.GetFileName(entryFiles);
                row[1] = entryFiles;
                tableWithPhotos.Rows.Add(Path.GetFileName(entryFiles), entryFiles);
            }
        }
        private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            progressBar1.Visible = false;
            var formToOpen = new FormResultadosFotos(tableWithPhotos);
            formToOpen.Show();
        }
    }
}

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что вы добавляете новую строку в datagridview как datatable, и это работает. С помощью datagridview вы можете сделать:

tableWithPhotos.Rows.Add(Path.GetFileName(entryFiles), entryFiles);

Или [Если в вашей таблице данных есть какая-либо строка], вы можете сделать:

DataGridViewRow row = (DataGridViewRow)tableWithPhotos.Rows[0].Clone();
row[0] = Path.GetFileName(entryFiles);
row[1] = entryFiles;
tableWithPhotos.Rows.Add(row);

Пожалуйста, обратитесь к этой ссылке для более подробной информации: DataGridViewRows

Поскольку вы создаете новую форму и добавляете к ней сетку данных, то результат будет нулевым. Вы можете сделать как показано ниже:

option1: сделать filesList членом класса и создать новую форму на основе filesList вместо dataGridView tableWithPhotos и добавить строку в DataGridView в FormResultadosFotos, аналогичную общему текущему коду.

var formToOpen = new FormResultadosFotos(filesList);
formToOpen.Show();

вариант 2: изменить ваш конструктор FormResultadosFotos:

        public FormResultadosFotos(DataGridView dataGridView)
        {
            InitializeComponent();
            dataGridView1.Rows.Clear();

            foreach (DataGridViewRow row in dataGridView.Rows)
            {
                dataGridView1.Rows.Add(row.Cells[0].Value, row.Cells[1].Value);
            }
        }

P / S: убедитесь, что ваш DataGridView в вашем FormResultadosFotos уже имеет 2 столбца.

унывайте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...