我有一个像facebook墙的场景,我需要在转发器控件中显示发布的用户图像。
我尝试了myrepeater_ItemCommand1
或myrepeater_ItemDataBound
但没有工作。
背后的代码
protected void myrepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
LinkButton lblPostedBy = (LinkButton)e.Item.FindControl("lblPostedBy");
con.Open();
cmd.CommandText = "select image from " + lblPostedBy.Text + " where id=1";
cmd.Connection = con;
string imageurl = (string)cmd.ExecuteScalar();
con.Close();
Image Image1 = (Image)e.Item.FindControl("Image1");
Image1.ImageUrl = imageurl;
}
catch (Exception a)
{
lblMsg.Text = a.Message;
msgbox.Visible = true;
}
}
和myrepeater_ItemCommand1
中的相同,如果我点击Repeater内的按钮,它就会起作用。
我想知道Repeater control
或Page_Load
时Page_Init
发生了什么事件。
或者,请建议我完成任务的其他方法。
顺便说一句,我的项目在C# ASP.NET 4
。
答案 0 :(得分:1)
保存帖子后,您应该重新绑定转发器。重新绑定转发器后,应显示更新。
//update some stuff in the database
Repeater1.DataSource = RepeaterDataSource();
Repeater1.DataBind();
修改强>
<asp:Repeater ID="Repeater1" runat="server" ...>
<ItemTemplate>
<asp:Image ID="imgProfilePic" runat="server" ImageUrl='<%#Eval("ProfileImageUrl")%>' ... />
<%#Eval("PostMessage")%>
</ItemTemplate>
</asp:Repeater>
在后面的代码中:
protected void BindDataToRepeater()
{
Repeater1.DataSource = GetUserPosts();
Repeater1.DataBind();
}
更新后:
protected void Button1_Click(object sender, EventArgs e)
{
//save post to database
SavePost();
//rebind the repeater to display the post that was just added
BindDataToRepeater();
}