将二进制文件绑定到数据列表中的ASPxCardView中的图像

时间:2018-08-26 14:24:47

标签: asp.net vb.net devexpress cardview

我正在尝试使用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

0 个答案:

没有答案