如何在不下载的情况下从DataGridView中的链接显示图像

时间:2016-10-27 16:17:22

标签: c# mysql image winforms datagridview

我有一个程序显示可下载的应用程序列表,其中包含一个图标列。它从MySQL数据库获取数据,但它将图像作为链接。

有没有办法显示该图像而无需将其下载到客户端计算机?如果有,有人可以告诉我怎么样?如果没有人可以告诉我如何检查该行的图像是否已下载,如果是,则显示该行,如果不是,则从URL下载并且显示它?

请提供一些详细信息或链接到详细信息的网站,因为这是我第一次做这样的事情,而且我只在3周前开始用C#。

1 个答案:

答案 0 :(得分:0)

尽管你的问题看起来很广泛,你可以通过使用自己喜欢的搜索引擎网站找到答案。以下是答案以及最后的小样本申请。

  1. 不,没有下载就无法获取图片。 URL只是一个纯文本,指向Internet Universe中某处的图像。
  2. 然而没有。如果有人发现,他应该获得诺贝尔奖。
  3. 如果你知道图像存储在本地的路径是什么,你只需要检查这个文件是否仍然存在。
  4. 如果它本地不存在,那么显然你需要下载它。
  5. 下载后,只需在适当的列下将其呈现给DataGridView即可识别图像。
  6. 这是承诺的小样本应用程序,可以帮助您入门。

    namespace WindowsFormsApplication
    {
        using System;
        using System.Data;
        using System.Drawing;
        using System.IO;
        using System.Net;
        using System.Windows.Forms;
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.DataSource = GetDataTable();
            }
    
            private DataTable GetDataTable()
            {
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add("Image", typeof(Image));
    
                // Path to store locally the image
                string imageLocalPath = AppDomain.CurrentDomain.BaseDirectory + "image.ico";
    
                if (File.Exists(imageLocalPath))
                {
                    dataTable.Rows.Add(new object[] { Image.FromFile(imageLocalPath) });                    
                }
                else
                {
                    // Get request to download the image if it does not exist locally
                    var request = WebRequest.Create("http://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d");
    
                    using (var response = request.GetResponse())
                    using (var stream = response.GetResponseStream())
                    {
                        // Check if the request is successful
                        if ((response as System.Net.HttpWebResponse).StatusCode == HttpStatusCode.OK)
                        {
                            var image = Bitmap.FromStream(stream);
                            image.Save(imageLocalPath);
    
                            dataTable.Rows.Add(new object[] { image });
                        }
                        // No local image exist and the URL is no longer valid
                        else
                        {
                            // The default Windows Forms image will be displayed
                        }
                    }
                }
    
                return dataTable;
            }
        }
    }