无法通过C#在网格视图中显示位图图像

时间:2014-05-27 21:50:51

标签: c# asp.net

我在aspx页面上有一个网格

<asp:GridView ID="gvmails" runat="server"></asp:GridView></div>

并希望从List<ContactDetail>

绑定它

这是ContactDetail

public class ContactDetail
{
    public string Name { get; set; }
    public string EmailAddress1 { get; set; }
    public string EmailAddress2 { get; set; }
    public string Phone { get; set; }
    public string Details { get; set; }
    public System.Drawing.Image Pic { get; set; }  
}

在按钮上单击我想绑定此网格。所有的东西都在网格中正确显示,除了pic。 这是我的服务器端代码

public static List<ContactDetail> GetGmailContacts(string App_Name, string Uname, string UPassword)
    {

        RequestSettings rs = new RequestSettings(App_Name, Uname, UPassword);
        rs.AutoPaging = true;
        ContactsRequest cr = new ContactsRequest(rs);
        Feed<Contact> f = cr.GetContacts();
        List<ContactDetail> contactDetails = new List<ContactDetail>();

        foreach (Contact entry in f.Entries)
        {
            ContactDetail contact = new ContactDetail
            {
                Name = entry.Name.FullName,
                EmailAddress1 = entry.Emails.Count >= 1 ? entry.Emails[0].Address : "",
                EmailAddress2 = entry.Emails.Count >= 2 ? entry.Emails[1].Address : "",
                Phone = entry.Phonenumbers.Count >= 1 ? entry.Phonenumbers[0].Value : "",
                Details = entry.Content,
                Pic = GetPic(cr, entry)
            };

            contactDetails.Add(contact);
        }

        return contactDetails;

    }

    private static System.Drawing.Image GetPic(ContactsRequest cr, Contact entry)
    {
        try
        {
            if (!string.IsNullOrEmpty(entry.Name.FullName))
            {
                return System.Drawing.Image.FromStream(cr.Service.Query(entry.PhotoUri));  
            }
        }
        catch (Exception)
        {

        }
        return null;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {

        List<ContactDetail> ds = GetGmailContacts("MyNetwork Web Application!", txtgmailusername.Text, txtpassword.Text);

        gvmails.DataSource = ds;

        gvmails.DataBind();
    }

即使是上一篇专栏图片也未出现。请告诉我遗漏的地方,以网格视图显示图片。

1 个答案:

答案 0 :(得分:0)

您无法直接将图像渲染为HTML [1]。 Web页面通常由多个资源组成,图像包含在<img src="" />元素中,其中src=""属性指定图像的资源路径。当您动态提供图像时,意味着您需要为图像提供单独的处理程序。您可以使用.ashx文件执行此操作。

我担心我的WebForms有点生疏(因为我非常喜欢ASP.NET MVC)但是改变你的GridView的ViewModel来为图像提供URI而不是位图数据(你和# 39;顺便说一下,忘记.Dispose(),然后您需要提供一个自定义TemplateField,将<img src=写入回复正文。

之后,您需要为图像本身实现.ashx处理程序。

[1]是的,从技术上讲,您可以使用data: URI,但它们适用于图标等小图片,而不是照片等大型内容。