在DataGridView单元格中显示来自Web的图像

时间:2015-02-06 13:48:31

标签: c# datagridview

我有一个绑定列表和源链接到我的DataGridView。

当我将一个项目添加到我的绑定列表中时,我想在单元格中显示该图像(来自Web)。这可能吗?

这是我到目前为止,我能够从网上加载图像,但我不知道如何在第一列的DataGridView行中显示它:

public partial class Form1 : Form
{
    static BindingList<VideoInfo> searchResults = new BindingList<VideoInfo>();
    BindingSource bindingSearchResults = new BindingSource()
    {
        DataSource = searchResults
    };

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        resultGrid.DataSource = bindingSearchResults;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        searchResults.Add(new VideoInfo()
        {
            Thumbnail = DownloadImage("http://i.ytimg.com/vi/uJbDSPRqX0o/mqdefault.jpg"),
            Title = "Man's Best Friend - Cyanide & Happiness Shorts",
            Url = "http://www.youtube.com/watch?v=uJbDSPRqX0o "
        });
    }

    private Image DownloadImage(string imageUrl)
    {

        try
        {
            WebRequest req = WebRequest.Create(imageUrl);
            return Image.FromStream(req.GetResponse().GetResponseStream());
        }
        catch { }
        return new Bitmap(1, 1);
    }
}

public struct VideoInfo
{
    public Image Thumbnail { get; set; }
    public string Title { get; set; }
    public string Url { get; set; }
}

1 个答案:

答案 0 :(得分:0)

这里的代码完全正常,至少如果点击了按钮点击。

您可能需要添加一行或两行来调整缩略图单元格的高度:

int maxWidth = -1;
foreach (DataGridViewRow row in resultGrid.Rows)
{
    Size imgSize = ((Image)row.Cells[0].FormattedValue).Size;
    row.Height = imgSize.Height;
    if (imgSize.Width > maxWidth) maxWidth = imgSize.Width;
    resultGrid.Columns[0].Width = maxWidth;
}

当然,如果您知道所有缩略图都有固定大小,您可以提前做到。