我有一个绑定列表和源链接到我的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; }
}
答案 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;
}
当然,如果您知道所有缩略图都有固定大小,您可以提前做到。