C# 无法通过C在网格视图中显示位图图像#
我在aspx页面上有一个网格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
<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();
}