我正在尝试使用Eval将数据库中的二进制图像绑定到devexpress图像查看器上,
我使用t1 t2和t3绑定了一些数据,如下例所示,但这些数据将显示出来,但是对于照片,二进制图像没有出现。
在调试时,读取器确实返回了字节数组,因此正在返回实际的图像。
我认为未显示图片是因为控件本身使用EVAL而不是后面的代码进行了绑定
我尝试了其他图像控件(例如aspximagezoom),但是图像仍然没有出现,我可以使用数据源将图像显示在服务器端来绑定图像,但是在这种情况下,我无法使用数据源来绑定cardview在数据列表中。
下面是我在当前实现中的asp和vb端的代码。
我错误地绑定了binaryImage吗?
ASP:
<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" DataKeyField="-">
<ItemTemplate>
<dx:ASPxCardView ID="ASPxCardView1" runat="server" AutoGenerateColumns="False" ClientInstanceName="cardview1" KeyFieldName="-">
<SettingsExport ExportSelectedCardsOnly="False">
</SettingsExport>
<Columns>
<dx:CardViewTextColumn Caption="" Name="-" VisibleIndex="0">
</dx:CardViewTextColumn>
</Columns>
<Templates>
<Card>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table>
<tr>
<td></td>
<td>
<dx:ASPxBinaryImage ID="ASPxBinaryImage1" runat="server" ImageContentBytes='<%# Eval("Photo") %>'></dx:ASPxBinaryImage>
</td>
</tr>
<tr>
<td>
<dx:ASPxLabel runat="server" Text='<%# Eval("t1") %>' />
</td>
<td></td>
</tr>
<tr>
<td>
t2
</td>
<td>
<dx:ASPxLabel runat="server" Text='<%# Eval("t2") %>' />
</td>
</tr>
<tr>
<td>
t3
</td>
<td>
<dx:ASPxLabel runat="server" Text='<%# Eval("t3") %>' />
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</Card>
</Templates>
<EditFormLayoutProperties ColCount="1">
</EditFormLayoutProperties>
<CardLayoutProperties ColCount="1">
<Items>
<dx:CardViewCommandLayoutItem ColSpan="1" HorizontalAlign="Right" ShowSelectCheckbox="True">
</dx:CardViewCommandLayoutItem>
<dx:CardViewColumnLayoutItem ColSpan="1" ColumnName="-">
</dx:CardViewColumnLayoutItem>
<dx:EditModeCommandLayoutItem ColSpan="1" HorizontalAlign="Right">
</dx:EditModeCommandLayoutItem>
</Items>
</CardLayoutProperties>
<StylesExport>
<Card BorderSides="All" BorderSize="1">
</Card>
<Group BorderSides="All" BorderSize="1">
</Group>
<TabbedGroup BorderSides="All" BorderSize="1">
</TabbedGroup>
<Tab BorderSize="1">
</Tab>
</StylesExport>
</dx:ASPxCardView>
</ItemTemplate>
</asp:DataList>
VB:
Private Shared Sub BindCardView(ByVal cdv As ASPxCardView, ByVal - As Integer)
Dim cardsource As DataTable = New DataTable("cardviewdt")
cardsource.Columns.Add("id")
cardsource.Columns.Add("t1")
cardsource.Columns.Add("t2")
cardsource.Columns.Add("t3")
cardsource.Columns.Add("Photo", GetType(Byte()))
Dim strConnectionString As String = ConfigurationManager.ConnectionStrings("-").ConnectionString
Dim conn As SqlConnection = New SqlConnection(strConnectionString)
Dim query As String =
"SELECT id, t1, t2, t3, Photo
FROM (-) INNER JOIN - ON -
WHERE -=@-"
Using cmd As SqlCommand = New SqlCommand(query, conn)
conn.Open()
cmd.Parameters.AddWithValue("@-", -)
Dim reader As SqlDataReader = cmd.ExecuteReader()
While reader.Read()
Dim bytes As Byte() = New Byte() {}
If Not Convert.IsDBNull(reader(10)) Then
bytes = CType(reader(10), Byte())
End If
cardsource.Rows.Add(CType(reader(0).ToString(), Int32), reader(1).ToString(), reader(2).ToString(3), bytes)
End While
conn.Close()
End Using
cdv.DataSource = cardsource
cdv.DataBind()
End Sub