我有一个评论框,其中有一个看起来像这样的模板字段..
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="CommentsDataSource" Height="167px" Width="325px">
<Columns>
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<div style="background-color:Silver">
<div class="avatar-frame">
<asp:Image ID="ProfilePic" runat="server"/>
</div>
<h1><%# Eval("TagLine")%></h1>
<h2><%# Eval("IfNonMemberUserName")%></h2>
<p><%# Eval("CommentBody")%></p>
</div>
</ItemTemplate>
<AlternatingItemTemplate>
<div style="background-color:White">
<div class="avatar-frame">
</div>
<h1><%# Eval("TagLine")%></h1>
<h2><%# Eval("IfNonMemberUserName")%></h2>
<p><%# Eval("CommentBody")%></p>
</div>
</AlternatingItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="CommentsDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:BookMeetConnString %>" ProviderName="<%$ ConnectionStrings:BookMeetConnString.ProviderName %>" SelectCommand="SELECT [IfNonMemberUserName], [UserAvatar], [TagLine], [CommentBody] FROM [comments] WHERE ([BookID] = ?)">
<SelectParameters>
<asp:QueryStringParameter Name="?" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>
一些背景知识: 我有一个 MS Access 数据库,其中有一个名为“userprofiles”的表,其中有一个名为 AvatarURL 的字段。类似地,还有一个名为“comments”的表,其中有一个名为“UserAvatar”的查找字段,指的是“userprofiles”表的“AvatarURL”字段。
我在后面的代码中收到“'ProfilePic' 未声明。由于它的权限级别,它可能无法访问”错误。Intellisense 告诉我 ID 为“ProfilePic”的图像未声明(在 DisplayData 子例程中。
有问题的代码是:
Protected Sub DisplayData()
Dim conn As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
Dim sql = "SELECT * FROM userprofiles WHERE TravellerName=@f1"
Dim cmd = New OleDbCommand(sql, conn)
cmd.Parameters.AddWithValue("@f1", User.Identity.Name)
conn.Open()
Dim profileDr = cmd.ExecuteReader()
profileDr.Read()
If Not IsDBNull(profileDr("AvatarURL")) Then ProfilePic.ImageUrl = profileDr.Item("AvatarURL")
conn.Close()
End Sub
在运行时,detail.aspx 工作正常,但评论框中的头像根本不显示。我究竟做错了什么?
编辑:
我设法做到了这一点:
Protected Sub GridView2_RowDataBound(sender As Object, e As GridViewRowEventArgs) Dim conn As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString) Dim sql = "SELECT * FROM userprofiles WHERE TravellerName=@f1" Dim cmd = New OleDbCommand(sql, conn) cmd.Parameters.AddWithValue("@f1", User.Identity.Name) conn.Open() Dim profileDr = cmd.ExecuteReader() profileDr.Read() Dim ProfilePic If e.Row.RowType = DataControlRowType.DataRow Then ProfilePic = e.Row.FindControl("ProfilePic") If Not IsDBNull(profileDr("AvatarURL")) Then ProfilePic.ImageUrl = profileDr.Item("AvatarURL") End If conn.Close() End Sub
但是,图像仍然不会在运行时出现。这有什么问题?我应该使用数据阅读器吗?