Solved

how to set image to DataGridViewImageColumn from image path?

Posted on 2011-03-22
17
6,988 Views
Last Modified: 2013-12-17
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
Comment
Question by:njgroup
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
17 Comments
 
LVL 9

Expert Comment

by:jkofte
ID: 35196208
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
 
LVL 9

Expert Comment

by:mayank_joshi
ID: 35196210
0
 

Author Comment

by:njgroup
ID: 35196616
hi,

this is not asp.net application, its windows application
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 6

Expert Comment

by:nandithaa
ID: 35196933
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
 
LVL 6

Accepted Solution

by:
nandithaa earned 250 total points
ID: 35197722
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
 

Author Comment

by:njgroup
ID: 35204762
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
 

Author Comment

by:njgroup
ID: 35204827
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
 
LVL 6

Expert Comment

by:nandithaa
ID: 35205107
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
 

Author Comment

by:njgroup
ID: 35205230
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
 
LVL 6

Expert Comment

by:nandithaa
ID: 35212636
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
 

Author Comment

by:njgroup
ID: 35224779
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
 

Author Comment

by:njgroup
ID: 35225574
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
 
LVL 6

Expert Comment

by:nandithaa
ID: 35229493
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
 

Author Comment

by:njgroup
ID: 35230224
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
 
LVL 13

Assisted Solution

by:gamarrojgq
gamarrojgq earned 250 total points
ID: 35291063
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

Featured Post

Enroll in June's Course of the Month

June’s Course of the Month is now available! Experts Exchange’s Premium Members, Team Accounts, and Qualified Experts have access to a complimentary course each month as part of their membership—an extra way to sharpen your skills and increase training.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you’re thinking to yourself “That description sounds a lot like two people doing the work that one could accomplish,” you’re not alone.
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

729 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question