Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法通过C在网格视图中显示位图图像#_C#_Asp.net - Fatal编程技术网

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

C# 无法通过C在网格视图中显示位图图像#,c#,asp.net,C#,Asp.net,我在aspx页面上有一个网格 <asp:GridView ID="gvmails" runat="server"></asp:GridView></div> 单击一个按钮,我想绑定这个网格。所有的东西都在网格中正确显示,只有pic除外。 这是我的服务器端代码 public static List<ContactDetail> GetGmailContacts(string App_Name, string Uname, string UPassw

我在aspx页面上有一个网格

<asp:GridView ID="gvmails" runat="server"></asp:GridView></div>
单击一个按钮,我想绑定这个网格。所有的东西都在网格中正确显示,只有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();
    }
publicstaticlist GetGmailContacts(字符串App\u Name、字符串Uname、字符串UPassword)
{
RequestSettings rs=新的RequestSettings(应用程序名称、Uname、UPassword);
rs.autopage=true;
ContactsRequest cr=新的ContactsRequest(rs);
Feed f=cr.GetContacts();
List contactDetails=新列表();
foreach(f.Entries中的联系人条目)
{
ContactDetail联系人=新的ContactDetail
{
Name=entry.Name.FullName,
EmailAddress1=entry.Emails.Count>=1?entry.Emails[0]。地址:“”,
EmailAddress2=entry.Emails.Count>=2?entry.Emails[1]。地址:“”,
Phone=entry.Phonenumbers.Count>=1?entry.Phonenumbers[0]。值:“”,
Details=entry.Content,
Pic=GetPic(cr,条目)
};
联系人详细信息。添加(联系人);
}
返回联系人详细信息;
}
专用静态System.Drawing.Image GetPic(联系人请求cr,联系人条目)
{
尝试
{
如果(!string.IsNullOrEmpty(entry.Name.FullName))
{
返回System.Drawing.Image.FromStream(cr.Service.Query(entry.PhotoUri));
}
}
捕获(例外)
{
}
返回null;
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
List ds=GetGmailContacts(“mynetworkweb应用程序!”,txtgmailusername.Text,txtpassword.Text);
gvmails.DataSource=ds;
gvmails.DataBind();
}

即使是最后一列图片也不会出现。请告诉我在网格视图中显示图像时缺少的内容。

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

我担心我的WebForms有点过时了(因为我非常喜欢ASP.NET MVC),但是更改GridView的ViewModel,为图像提供URI,而不是位图数据(顺便说一句,您忘记了位图数据的
.Dispose()
),然后需要提供一个自定义
模板字段
,它将
写入响应体

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


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

您对HTML了解多少?您是从WinForms还是WPF的角度来看待ASP.NET?
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();
    }