Solved

how to set image to DataGridViewImageColumn from image path?

Posted on 2011-03-22
17
6,697 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
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
Forrester Webinar: xMatters Delivers 261% ROI

Guest speaker Dean Davison, Forrester Principal Consultant, explains how a Fortune 500 communication company using xMatters found these results: Achieved a 261% ROI, Experienced $753,280 in net present value benefits over 3 years and Reduced MTTR by 91% for tier 1 incidents.

 
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

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!

Question has a verified solution.

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

In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Computer science students often experience many of the same frustrations when going through their engineering courses. This article presents seven tips I found useful when completing a bachelors and masters degree in computing which I believe may he…
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 …

749 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