动态添加ASP.Net控件
问题描述:
我有一个存储过程,根据存储在数据库中的记录数返回一些行,现在我想创建一个带有包含该行的值的控件的<div>
标记,如果有10行从数据库返回,那么必须创建10 <div>
标签,我有下面的代码来从数据库中获取结果,但我不知道如何从这里继续。动态添加ASP.Net控件
String sql = "exec dbo.spLoadCandidates @NationalID, @PostID";
SqlDataReader reader;
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@NationalID",TextBox2.Text.Trim());
cmd.Parameters.AddWithValue("@PostID,", DropDownList1.SelectedValue);
conn.Open();
reader = cmd.ExecuteReader();
while (reader.HasRows)
{
//Dynamic Data here
}
conn.Close();
}
更新:使用web表单由于您使用ASP.NET WebForms
做到这一点
答
你有几种选择。
方案1。添加一个PlaceHolder
到你的aspx,并填写你想要的内容。
<asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder>
然后你就可以到这个PlaceHolder
从后面的代码添加内容。
String sql = "exec dbo.spLoadCandidates @NationalID, @PostID";
SqlDataReader reader;
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@NationalID",TextBox2.Text.Trim());
cmd.Parameters.AddWithValue("@PostID,", DropDownList1.SelectedValue);
conn.Open();
reader = cmd.ExecuteReader();
while (reader.HasRows)
{
// Create div.
var div = new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");
createDiv.InnerHtml = "" // Fill with your content...
// Add to placeholder.
PlaceHolder1.Add(createDiv);
}
conn.Close();
}
备选2。使用Repeater
您的aspx。
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div><%# Eval("Name") %></div>
</ItemTemplate>
</asp:Repeater>
背后代码:
// Some class to keep your info...
public class MyModel
{
public string Name { get; set; }
}
并且代码:
String sql = "exec dbo.spLoadCandidates @NationalID, @PostID";
SqlDataReader reader;
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@NationalID",TextBox2.Text.Trim());
cmd.Parameters.AddWithValue("@PostID,", DropDownList1.SelectedValue);
conn.Open();
reader = cmd.ExecuteReader();
var list = new List<MyModel>();
while (reader.HasRows)
{
var model = new MyModel();
model.Name = "foo"; // Fill with your content...
list.Add(model);
}
conn.Close();
// Bind to repeater.
Repeater1.DataSource = list;
Repeater1.DataBind();
}
答
上午,我建议你使用Repeater。
,但如果你喜欢用代码来做到这一点,这里有一个解决方法:
// Sample data
var items = new string[] { "User1", "User2", "User3" };
foreach (var item in items)
{
// Create a new div control for each item
// You can create any ASP.NET WebForms control as well, such ASP.Net Label or etc
System.Web.UI.HtmlControls.HtmlGenericControl divControl =
new System.Web.UI.HtmlControls.HtmlGenericControl("DIV") {
ID = item,
InnerHtml = item
};
// Add control to the page
// You can also add control to a panel or any container control
Controls.Add(divControl);
}
答
可以使用Repeater控件呈现任何自定义标记的项目的集合。你可以试试这个:
标记:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div>
<%# Eval('column1') %>
<%# Eval('column2') %>
</div>
</ItemTemplate>
</asp:Repeater>
后面的代码:你的SQL结果绑定到Repeater控件。
protected void Page_PreRender(object sender, EventArgs e)
{
String sql = "exec dbo.spLoadCandidates @NationalID, @PostID";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@NationalID",TextBox2.Text.Trim());
cmd.Parameters.AddWithValue("@PostID,", DropDownList1.SelectedValue);
conn.Open();
using(SqlDataReader reader = cmd.ExecuteReader())
{
Repeater1.DataSource = reader;
Repeater1.DataBind();
};
conn.Close();
}
}
您是否使用WebForms,MVC或其他? – davke
正在使用网页表单... –
看看''http://code.runnable.com/UjMj269qAWwQAAB3/asp-net-how-to-use-repeater –
TryingToImprove