2009-06-17 11 views
0

Hallo alle, die ich an einem kleinen Projekt arbeite, wo ich Kontrollen auf einer Seite auf einer SQL-Tabelle von Fragen hinzufüge, wird diese Tabelle Überstunden wachsen. Ich wollte nur den Code teilen und sehen, ob es irgendeinen besseren Weg gab oder ob einer der Experten eingreifen und mir einen Einblick in zukünftige Probleme geben könnte. Hier ist der Code:Hinzufügen von Steuerelementen abhängig von SQL-Tabelle?

 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); 

    } 

Antwort

3

ein Repeater-Steuerelement verwenden:

ASPX Code:

<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> 

-Code hinter:

// 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

Wenn die Kontrollen entweder Nutzung oder zur Unterstützung Viewstate , dann müssen Sie sicherstellen, dass die gleichen Steuerelemente zu ViewState in derselben Reihenfolge hinzugefügt werden, auf jedem Post zurück. Die Reihenfolge, in der Objekte zu ViewState hinzugefügt werden, hängt von der Reihenfolge der Steuerelemente in der Steuerelementstruktur ab.

Verwandte Themen