如何从GridView/SqlDataSource将image1绑定至ASPxImage控件?
解决方案:绑定二进制
image1字段到ASPxImage控件 你的核心问题有两个:一是ASPxPopupControl内的ASPxImage不在数据绑定容器中,直接使用Eval("image1")无效;二是image1为二进制存储的图片,无法直接作为ImageUrl的值。以下提供两种可行方案:
方案一:替换为ASPxBinaryImage控件(适配二进制字段)
DevExpress的ASPxBinaryImage控件原生支持二进制图片绑定,是最适配的方案:
- 修改Popup内的控件为
ASPxBinaryImage:
<dx:ASPxPopupControl ID="popup" runat="server" ClientInstanceName="popup" Modal="true" HeaderText="Büyütülmüş CRQS Fotoğrafları" PopupHorizontalAlign="WindowCenter" PopupVerticalAlign="Middle" OnCallback="popup_Callback"> <ContentCollection> <dx:PopupControlContentControl> <dx:ASPxBinaryImage ID="img" runat="server" Value='<%# Eval("image1") %>' ImageHeight="500px" ImageWidth="500px"> </dx:ASPxBinaryImage> </dx:PopupControlContentControl> </ContentCollection> </dx:ASPxPopupControl>
- 配置GridView行点击的前端回调:
<dx:ASPxGridView ID="PhotoGrid" DataSourceID="PhotoDataSource" KeyFieldName="id" Width="100%" runat="server" Visible="false" > <ClientSideEvents RowClick="function(s, e) { s.GetRowValues(e.visibleIndex, 'id', function(id) { popup.PerformCallback(id); }); }" /> <!-- 列代码保持不变 --> </dx:ASPxGridView>
- 后台实现Popup的回调逻辑(C#示例):
protected void popup_Callback(object sender, DevExpress.Web.CallbackEventArgsBase e) { int rowId = Convert.ToInt32(e.Parameter); // 设置数据源参数,获取对应行的图片数据 PhotoDataSource.SelectParameters["id"].DefaultValue = rowId.ToString(); // 绑定图片控件 img.DataBind(); // 显示弹窗 popup.Show(); }
方案二:将二进制图片转为Base64绑定到ASPxImage
如果坚持使用ASPxImage控件,可把二进制数据转为Base64格式的DataUrl:
- 后台添加转换方法:
public string ConvertImageToBase64(byte[] imageData) { if (imageData == null || imageData.Length == 0) return string.Empty; // 根据实际图片格式调整(如png、gif) return "data:image/jpeg;base64," + Convert.ToBase64String(imageData); }
- 修改ASPxImage的绑定表达式:
<dx:ASPxImage ID="img" runat="server" ImageUrl='<%# ConvertImageToBase64((byte[])Eval("image1")) %>'></dx:ASPxImage>
- 同样需要在GridView行点击时,通过回调触发弹窗控件的
DataBind(),逻辑同方案一的回调代码。
关键注意事项
- 确保
PhotoDataSource的SelectCommand能根据id正确获取image1字段数据。 - 大量图片场景下,Base64格式会增加页面体积,优先选择
ASPxBinaryImage方案。 - 弹窗显示前必须执行控件的
DataBind(),否则绑定不会生效。
内容的提问来源于stack exchange,提问作者M.Eren
相关产品推荐
相关产品推荐

