此页面用于检索数据并在页面中显示,并允许用户编辑信息。
此时我需要检索数据并将其显示在文本框中。
因为我还必须从数据中检索多个数据并显示在每个不同的文本框上。
我的.cs代码如下:
foreach (DataRow dr in ChildImageDT.Rows)
{
myImage = new Images();
myImage.DateTaken = DateTime.Parse(dr["image_taken_dt"].ToString());
myImage.PlaceTaken = dr["image_taken_loc"].ToString();
myImage.DetailedInfo = dr["image_info"].ToString();
tableString += "<tr><td>Date Taken:</td>";
tableString += "<td><asp:TextBox ID=\"txtDateOfBirth\">" + myImage.DateTaken + "</asp:TextBox>";
tableString += "<asp:CalendarExtender ID=\"CalendarExtender1\" runat=\"server\" CssClass=\"AjaxCalendar\"";
tableString += "PopupButtonID=\"imgCalendar\" PopupPosition=\"Right\" TargetControlID=\"txtDateOfBirth\" Format=\"MM/dd/yyyy\"></asp:CalendarExtender>";
**tableString += "<asp:TextBoxWatermarkExtender ID=\"TextBoxWatermarkExtender1\" runat=\"server\" TargetControlID=\"txtDateOfBirth\" WatermarkText=\"Month/Day/Year\" WatermarkCssClass=\"watermarked\"></asp:TextBoxWatermarkExtender>";**
tableString += "<asp:Image ID=\"imgCalendar\" runat=\"server\" ImageUrl=\"img/Button/calendar.png\" Width=\"20px\" /></td>";
**tableString += "<td rowspan=3 ><input type=\"button\" class=\"right_content\" title=\"" + " " + "\"";
tableString += "onClick =\"location.href='ViewProfile.aspx?cid=" + "" + "'\" ";
tableString += "style=\"background-size:100%; background:url('/img/missing%20children%20pictures/";**
tableString += "" + ".jpg')\"/></td></tr>";
tableString += "<tr><td>Place Taken:</td>";
**tableString += "<td>" + textbox1.Text = myImage.PlaceTaken;**
tableString += "</td><td></td></tr>";
tableString += "<tr><td rowspan=3>Detailed Info:</td>";
tableString += "<td rowspan=3><input id=\"txtImageDetailedInfo\" type=\"text\">" + myImage.DetailedInfo + "</input></td><td></td></tr>";
tableString += "<tr><td><input id=\"SetProfilePicture\" type=\"radio\" /></td></tr>";
tableString += "<tr><td><input id=\"DeletePhoto\" type=\"checkbox\" /></td></tr>";
}
页面应如下所示: 每张照片都有自己的描述,我需要从中检索所有的图像和数据
答案 0 :(得分:1)
我认为您可以更好地编写代码。我建议两种方式:
您可以使用PlaceHolder控件并将控件添加到占位符。您可以通过Literal Control添加html。
LiteralControl lit = new LiteralControl("<tr><td>Date Taken:</td>");
placeHolder1.Controls.Add(lit);
[Code]
var txt = new TextBox();
txt.Text = [Data];
PlaceHolder1.Controls.Add(txt);
您可以覆盖Render页面事件并通过HTMLTextWriter编写html。
protected override void Render(HtmlTextWriter output) {
output.Write ("<h3> Hello </h3>");
}
答案 1 :(得分:1)
你需要什么?我认为你的应用程序设计不好,而你的问题的最佳解决方案是使用其他方法来显示你的数据和控件。据我了解你 - 你需要显示许多转发器数据块,包括你的文本框。尝试阅读有关Repeater Control的信息。例如,您的问题将有下一个解决方案:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<table>
<tr>
<td>UserName:</td>
<td><asp:TextBox ID="txtName" runat="server" /></td>
</tr>
<tr>
<td>Image:</td>
<td><asp:TextBox ID="txtPassword" Text="<%#Eval("Password")%>" runat="server" /></td>
</tr>
<tr>
<td>Image:</td>
<td><asp:Image ID="TextBox1" ImageUrl="<%#Eval("ImgUrl")%>" runat="server" /></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
在代码中你可以使用你的转发器:
public partial class _Default : System.Web.UI.Page
{
private class User
{
public string Name { get; set; }
public string Password { get; set; }
public string ImageUrl { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
var userList = new[] {
new User {Name = "user1", Password = "pass1", ImageUrl = "img1.jpg"},
new User {Name = "user2", Password = "pass2", ImageUrl = "img2.jpg"},
new User {Name = "user3", Password = "pass3", ImageUrl = "img3.jpg"},
};
Repeater1.DataSource = userList;
Repeater1.DataBind();
}
}
关于Repeater的你可以阅读here
答案 2 :(得分:1)
您应该使用Repeater control或其他一些数据转发器控件来构建此类布局。
答案 3 :(得分:1)
根据你的问题:
我试过这个,但是你可以指导我如何使用foreach(ChildImageDT.Rows中的DataRow dr)和转发器。我似乎无法填充数据
尝试下一步:
var userList = new List<User>();
foreach (DataRow row in dataTable.Rows)
{
var user = new User()
{
Name = row["Name"].ToString(),
Password = row["Password"].ToString(),
ImageUrl = row["ImageUrl"].ToString()
};
userList.Add(user);
}
repeater1.DataSource = userList;
repeater1.DataBind();
}
当然,您需要根据您的任务定义实现数据控制的类。
我强烈建议你花一两天时间阅读有关Repeater的章节。相信我,如果你这样做 - 你的创造计划的进度会大大加快。
p.s。:尝试为Linq做好准备 - 这是一项非常强大的技术,可以替代你的 foreach ,就像这样。
答案 4 :(得分:0)
您需要正确构建控制树。例如,您需要实例化TextBox(TextBox txt = new TextBox())并将其添加到另一个控件的Controls集合中。对于这种类型的事情,我将在标记中定义一个asp:Panel,并在
后面的代码中添加我的动态控件