• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 8456
  • Last Modified:

how to set image to DataGridViewImageColumn from image path?

hi,

I have datatable which have 3 columns id, name, imgPath
imgPath has full path of the image, such as D:/someimage.jpg

I want to set each image of its relative path to DataGridViewImageColumn that I have created in DataGridView,

so how can I do that?
0
njgroup
Asked:
njgroup
2 Solutions
 
jkofteCommented:
you will have to replace the text until the root directory of your website.

For let's say D:/websites/website1/images/img1.jpg and if the root directory is D:/websites/website1, you need to replace it with string.empty or "" so, you will have /images/img1.jpg

You can store D:/websites/website1 as a key in your web.config file so when you deploy your application, by changing the key with new path, you will have the same result.
0
 
njgroupAuthor Commented:
hi,

this is not asp.net application, its windows application
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

 
nandithaaCommented:
Check if this helps or not,
private void CreateColumns()
        {
            DataGridViewImageColumn imageColumn;
            Bitmap bmpImage = null;
            imageColumn = new DataGridViewImageColumn();
            bmpImage = (Bitmap)Image.FromFile(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.JPG", true);
            imageColumn.Image = bmpImage;
            imageColumn.ImageLayout = DataGridViewImageCellLayout.Stretch;
            dataGridView1.Columns.Add(imageColumn);
            dataGridView1.Rows.Add();
            dataGridView1.Rows[0].Cells[0].Value = bmpImage;
            dataGridView1.Rows[0].Height = 100;

        }

Open in new window

0
 
nandithaaCommented:
Private Sub CreateColumns()
      Dim imageColumn As DataGridViewImageColumn
      Dim bmpImage As Bitmap = Nothing
      imageColumn = New DataGridViewImageColumn()
      bmpImage = DirectCast(Image.FromFile("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.JPG", True), Bitmap)
      imageColumn.Image = bmpImage
      imageColumn.ImageLayout = DataGridViewImageCellLayout.Stretch
      dataGridView1.Columns.Add(imageColumn)
      dataGridView1.Rows.Add()
      dataGridView1.Rows(0).Cells(0).Value = bmpImage
      dataGridView1.Rows(0).Height = 100

End Sub
0
 
njgroupAuthor Commented:
but what if I have datatable, and it has imgPath column as image path,

I have created the DataGridViewImageColumn, but I need now foreach loop to go for each path and assign it to DataGridViewImageColumn cell, and the imgPath column should be hidden
0
 
njgroupAuthor Commented:
your code does not change the image of the cell:

                foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
                {
                    string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
                    Bitmap b = new Bitmap(imgPath);
                    dgvProductsGridTMP.Rows[row.Index].Cells["productImage"].Value = b;
                }
0
 
nandithaaCommented:
What about now? You have to take image from the file, use (Bitmap)Image.FromFile(imgPath , true); instead of new Bitmap(imgPath);
foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
                {
                    string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
                    Bitmap b = (Bitmap)Image.FromFile(imgPath , true);

                    dgvProductsGridTMP.Rows[row.Index].Cells["productImage"].Value = b;
                }

Open in new window

0
 
njgroupAuthor Commented:
no, here is my code:

                foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
                {
                    string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
                    row.Cells["productImage"].Value = (Bitmap)System.Drawing.Image.FromFile(imgPath, true);
                }
0
 
nandithaaCommented:
Your code works perfectly for me. Can u  provide me with more code if u don't mind? U've included the extension of the image rite?
Can u plz check if file exists in the directory, later u can remove that code....
foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
                {
                    string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
                    if (System.IO.Directory.Exists(imgPath ))
                          {
                    row.Cells["productImage"].Value = (Bitmap)System.Drawing.Image.FromFile(imgPath, true);
                           }
                           else
                           {
                                 MessageBox.Show("Invalid Path");
                           }
                }

Open in new window

0
 
njgroupAuthor Commented:
yes, I got invalid path!

but there is something strange

I had checkpoint in imgPath variable, I took the complete value pf imgPath from "Text Visualizer"  (which representing the full path "Z:\images\175.png"), and I put it in address bar of windows explorer, so, I can see the image, I dont know why it gives me incorrect path in my code!

please note that this path representing mapped driver, I have code to map a driver, and I can see mapped drive in my computer and open the image from there, and it looks like any driver (C, D, ...)

but its not working from my code!
0
 
njgroupAuthor Commented:
I got the UNC path of Z: drive (\\192.168.1.157\d$\ProductManagmentSystem\images\175.png) and that is not working for me too
0
 
nandithaaCommented:
I'm sorry njgroup, i made a terrible mistake, as "mas_oz2003" pointed out in http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_26914351.html it is not  "Directory.Exists", instead it is "File.Exists" . I replied in hurry, so i used "Directory.Exists" without thinking.... Once again sorry for the trouble....

And as for mapped driver, plz ensure u've sufficient permission granted for accessing the image.....
0
 
njgroupAuthor Commented:
ok,
I solve the problem of network path
but the image does not displayed in data grid view, and it is displayed in normal picturebox!!!!!

                foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
                {
                    string imgPath = @"E:\Leamra Projects\ProductManagment\images\cam_product.png";
                    if (System.IO.File.Exists(imgPath))
                    {
                        pictureBox1.Image = System.Drawing.Image.FromFile(imgPath, true); \\ here it is showing the image
                        row.Cells["productImage"].Value = System.Drawing.Image.FromFile(imgPath, true); \\ here it is not showing the image
                    }
                    else
                    {
                        MessageBox.Show("Invalid Path");
                    }
                }
0
 
gamarrojgqCommented:
Hi,

Try to use Image property instead of Value like this

foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
                {
                    string imgPath = @"E:\Leamra Projects\ProductManagment\images\cam_product.png";
                    if (System.IO.File.Exists(imgPath))
                    {
                        pictureBox1.Image = System.Drawing.Image.FromFile(imgPath, true); \\ here it is showing the image
                        row.Cells["productImage"].Image = System.Drawing.Image.FromFile(imgPath, true); \\ here it is not showing the image
                    }
                    else
                    {
                        MessageBox.Show("Invalid Path");
                    }
                }
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now