2009-06-17 11 views
0

こんにちはすべて私は質問のSQLテーブルに基づいてページにコントロールを追加する小さなプロジェクトに取り組んでいます。このテーブルは時間外に成長します。私はちょうどコードを共有し、よりよい方法があるかどうか、あるいは専門家のいずれかがチャイムに入り、将来の問題について私に洞察力を与えることができるかどうかを見たいと思っていました。ここでは、コードは次のようになります。SQLテーブルに依存するコントロールを追加しますか?

 protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 

      SqlParameter[] paramz = new SqlParameter[1]; 
      paramz[0] = new SqlParameter("@c_id", 1); 

      dt = SqlHelper.ExecuteDataTable(ConfigurationManager.ConnectionStrings["sql"].ToString(), CommandType.StoredProcedure, "get_Questions", paramz); 
      clinicName.Text = "<b>" + dt.Rows[0]["Clinic Name"].ToString(); 

      for(int row = 0; row <= dt.Rows.Count; row++) 
      { 
       if (row == dt.Rows.Count) //if we're on the last question put a break for spacing(this could be fixed with styling) 
       { 
        Literal alit = new Literal(); 
        alit.Text = "<br/>"; 
        questionsPanel.Controls.Add(alit); 
       } 
       else 
       { 
        addQuestion(dt.Rows[row], row); 
       } 
      } 

     } 
     catch (Exception err) 
     { 
      Response.Write(err.Message); 
     } 

    } 

    private void addQuestion(DataRow row, int i) 
    { 
     Label lbl = new Label(); 
     lbl.Text = row["question"].ToString(); 
     questionsPanel.Controls.Add(lbl); 

     Literal lit = new Literal(); 
     lit.Text = "<br/>"; 
     questionsPanel.Controls.Add(lit); 

     TextBox txt = new TextBox(); 
     txt.ID = "txt" + i.ToString(); 
     questionsPanel.Controls.Add(txt); 

     Literal lit2 = new Literal(); 
     lit2.Text = "<br/>"; 
     questionsPanel.Controls.Add(lit2); 

    } 

答えて

3

Repeaterコントロールを使用します。

ASPXコード:背後

<asp:Repeater id="repData" runat="server"> 
    <ItemTemplate> 
     <asp:Label id="lblQuestion" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "question") %>' /> 
     <br /> 
     <asp:TextBox id="lblAnswer" runat="server" /> 
    </ItemTemplate> 
    <FooterTemplate> 
     <br /> 
    </FooterTemplate> 
</asp:Repeater> 

コード:

// Populate repeater 
SqlParameter[] paramz = new SqlParameter[1]; 
paramz[0] = new SqlParameter("@c_id", 1); 
dt = SqlHelper.ExecuteDataTable(ConfigurationManager.ConnectionStrings["sql"].ToString(), CommandType.StoredProcedure, "get_Questions", paramz); 

repData.DataSource = dt; 
repData.DataBind(); 
1

コントロールを使用するか、ViewStateのに貢献するいずれかの場合すべてのポストバックで同じコントロールが同じ順序でViewStateに追加されていることを確認する必要があります。オブジェクトがViewStateに追加される順序は、コントロールツリー内のコントロールの順序によって異なります。

関連する問題