【问题标题】:Add results do datagridview添加结果做datagridview
【发布时间】:2018-08-29 14:49:44
【问题描述】:

我正在尝试制作一个在特定文件夹(例如:CR7)而不是所有目录中查找所有图像的应用程序。我有一个网络共享和很多目录,我可以在其中找到特定文件夹“CR7”。我只需要该 CR7 文件夹中的图像。我可以找到它们并尝试将这些结果放在 datadridview 上,但没有成功。任何想法为什么filesList 不去数据表? 代码如下:

{
    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();
        }
    }
}

【问题讨论】:

  • 应该是:tableWithPhotos.Rows.Add(row); 为什么表单没有显示我们不知道的数据。您也必须发布该代码。

标签: c# image file


【解决方案1】:

我认为您正在向 datagridview 添加新行,就像数据表一样,它确实有效。 使用 datagridview,您可以:

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

或者[如果你的datagridview中有任何行],你可以这样做:

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

更多详情请参考此链接:DataGridViewRows

因为您正在创建新表单并向其添加数据网格,所以结果为空。你可以这样做:

选项1:将filesList作为类的成员,并基于filesList而不是DataGridView tableWithPhotos创建新表单,并在FormResultadosFotos中向DataGridView添加行,类似于您当前的代码。

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:确保 FormResultadosFotos 中的 DataGridView 已经有 2 列。

加油!

【讨论】:

  • 没有。不起作用:DataRow row = tableWithPhotos.NewRow(); row[0] = Path.GetFileName(entryFiles); row[1] = entryFiles; tableWithPhotos.Rows.Add(Path.GetFileName(entryFiles), entryFiles);
  • 嗨,有趣!你调试过,确定filesList里面有数据吗?
  • 是的,@Nhan Phan
  • tableWithPhotos 你有多少列?我刚刚用我这边的虚拟数据进行了测试,它起作用了: foreach (string entryFiles in filesList) { var path = "path"; tableWithPhotos.Rows.Add(Path.GetFileName(entryFiles), entryFiles); }
  • dataGridView2.ColumnCount = 2; dataGridView2.ColumnHeadersVisible = true; dataGridView2.DataSource = table; DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle(); columnHeaderStyle.BackColor = Color.Beige; columnHeaderStyle.Font = new Font("Verdana", 10, FontStyle.Bold); dataGridView2.ColumnHeadersDefaultCellStyle = columnHeaderStyle; dataGridView2.Columns[0].Name = "Filename"; dataGridView2.Columns[1].Name = "Ctrl+C";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多