如何动态地将图像添加到DataGridView(每行的特定列)

时间:2016-01-10 16:22:40

标签: c# .net winforms datagridview

使用C#和Webforms,代码如下:

DataGridViewImageColumn img = new DataGridViewImageColumn();
string path = "path" + file;
Image image = Image.FromFile(path);
img.Image = image;
DataGridView.Columns.Add(img);
img.HeaderText = "Picture";
img.Name = "picture";

我的问题是下一个问题。此代码无效... DataGridview未显示图像。 当我调试这段代码时,路径是正确的,我在img元素中正确加载了Image。更重要的是,当我使用多个图像时,DataGridView显示的是我添加的相同数量的列。但是根本没有显示任何图像,我只能在红十字会看到典型的白色方块......

有什么问题?

2 个答案:

答案 0 :(得分:5)

您可以将图像添加到Cells,如下所示:

dataGridView1[yourColumn, yourRow].Value = Image.FromFile(path); 

当然,您可以使用任何其他图片来源。这样您就可以将不同的图片加载到每个Row ..

注意:如果您真的只想为每个Row添加相同图片,可以使用您的代码您需要添加真实行。

AllowUserToAddRows开启时,会显示在最后一行,但会显示在您添加的所有其他行上。

答案 1 :(得分:1)

共享最终的代码解决方案是@TaW 有人问我:

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            codigo = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString());

            Piso formPiso = new Piso();

            var consultaPisoAlquiler = from piso in contexto.pisosAlquiler
                                       where piso.codigo == codigo
                                       select new
                                       {
                                           fotos = piso.fotos.Split(','),
                                           zona = piso.zona,
                                           mm = piso.mm,
                                           descripcion = piso.descripcion,
                                           precio = piso.precio,
                                           estado = piso.estado
                                       };

            formPiso.txtCodigo.Text = codigo.ToString();
            formPiso.txtDescripcion.Text = consultaPisoAlquiler.First().descripcion.ToString();
            formPiso.txtEstado.Text = consultaPisoAlquiler.First().estado.ToString();
            formPiso.txtMm.Text = consultaPisoAlquiler.First().mm.ToString();
            formPiso.txtPrecio.Text = consultaPisoAlquiler.First().precio.ToString();
            formPiso.txtZona.Text = consultaPisoAlquiler.First().zona.ToString();

            formPiso.DGVPisoFotos.AutoGenerateColumns = false;
            formPiso.DGVPisoFotos.Columns.Clear();
            DataGridViewImageColumn img = new DataGridViewImageColumn();
            img.Width = 230;
            img.HeaderText = "Fotos";
            formPiso.DGVPisoFotos.Columns.Add(img);
            int i = 0;
            foreach (var foto in consultaPisoAlquiler.First().fotos)
            {
                formPiso.DGVPisoFotos.Rows.Add();
                string path = "E:/WorkSpaces/MVS/ProyectoJoseph/" + foto;
                Bitmap image = (Bitmap)Image.FromFile(path);
                Bitmap imageRS = new Bitmap(image, new Size(230, 230));
                formPiso.DGVPisoFotos[0, i].Value = imageRS;
                formPiso.DGVPisoFotos.Rows[i].Height = 230;
                i++;
            }

            formPiso.ShowDialog();
}