在本周之前,我从来没有在我的生活中写过一篇关于ASP.NET的文章,所以请对我这么轻松。
我有一个ASP.NET页面,可以显示数据库中的图片。我创建了一个SqlDataReader并将转发器绑定到此读取器。该页面显示一个包含三列的表格:图片的缩略图(数据库中的路径),拍摄照片的相机名称(来自数据库)以及有关图片的评论。
当我将照片上传到数据库时,注释将为null。我希望表显示注释(如果存在),或者注释字段在数据库中为空,显示ASP文本框和按钮,供用户输入关于图片的注释。
事实证明这并不像我想象的那么容易。任何人都可以向我建议:
A)用于确定此行的“comment”列是否为空的显式测试
B)如何有条件地显示文本或文本框/按钮组合(具有来自数据库“ID”列的id的texbox)
我相信我有能力编写按钮点击处理程序以使用注释更新数据库...如果我可以显示它。
非常感谢,我承诺将来拒绝ASP.NET项目!
答案 0 :(得分:2)
由于您处于数据绑定上下文中,因此可以对占位符(或任何其他控件)的可见属性使用数据绑定表达式。
<asp:PlaceHolder runat="server" visible='<%# Convert.IsDbNull( Eval("comment") )%>'>
<asp:TextBox ID="txtNewComment"... />
<asp:Button ... />
</asp:PlaceHolder>
对于非null,只需拍打“转换”前面的一个惊叹点,并显示它何时不为空。
对于点击处理程序,由于“发件人”将成为按钮,因此您可以随时进行简单的
((Button)sender).Parent.FindControl("txtNewComment")
你有文本框。
答案 1 :(得分:0)
如果注释字段在数据库中包含NULL值,则可以使用Alex的建议来显示注释或文本框/按钮组合。我认为你需要绑定到'OnItemCommand'来处理转发器中的按钮点击。
这是一个例子。
<asp:Repeater ID="myRepeater" runat="server" OnItemCommand="myRepeater_ItemCommand">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Image ID="imgThumbNail" runat="server" ImageUrl='<%# Eval("path") %>' />
</td>
<td>
<asp:Label ID="lblCamera" runat="server" Text='<%# Eval("camera") %>'></asp:Label>
</td>
<td>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible='<%# Convert.IsDBNull( Eval("comment") )%>'>
<asp:Button ID="btnAddComment" runat="server" CommandArgument='<%# Eval("id") %>' CommandName="AddComment" Text="Add Comment" />
<asp:TextBox ID="txtComment" runat="server" </asp:TextBox>
</asp:PlaceHolder>
<asp:PlaceHolder ID="PlaceHolder2" runat="server" Visible='<%# !Convert.IsDBNull(Eval("comment"))%>'>
<asp:Label ID="lblComment" runat="server" Text='<%# Eval("comment") %>'></asp:Label>
</asp:PlaceHolder>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
protected void myRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "AddComment")
{
TextBox txtComment = (TextBox)e.Item.FindControl("txtComment");
int id = Convert.ToInt32(e.CommandArgument);
// use the record id to update the comment in the database with the value contained in the txtComment.Text property here
}
}