2016-11-25 126 views
-1

我有一個存儲過程,根據存儲在數據庫中的記錄數返回一些行,現在我想創建一個帶有包含該行的值的控件的<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做到這一點

+0

您是否使用WebForms,MVC或其他? – davke

+0

正在使用網頁表單... –

+0

看看''http://code.runnable.com/UjMj269qAWwQAAB3/asp-net-how-to-use-repeater – TryingToImprove

回答

4

你有幾種選擇。

方案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(); 
}  
1

上午,我建議你使用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); 
    } 
1

可以使用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(); 
    } 
}