Frage

Hallo alles, was ich bin auf ein kleines Projekt zu arbeiten, wo ich steuert auf einer Seite bin Hinzufügen basierend auf einer SQL-Tabelle von Fragen, wird diese Tabelle Überstunden wachsen. Ich wollte nur den Code teilen und sehen, ob es eine bessere Art und Weise war oder wenn eine der Experten läuten könnte und gibt mir einen Einblick in zukünftigen Problemen. Hier ist der Code:

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

    }
War es hilfreich?

Lösung

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

Andere Tipps

Wenn entweder die Kontrollen verwenden oder Viewstate tragen, dann müssen Sie sicherstellen, dass die gleichen Kontrollen in der gleichen Reihenfolge zu Viewstate hinzugefügt werden, auf jedem zweiten Pfosten. Die Reihenfolge, in der Objekte hinzugefügt werden, hängt Viewstate in der Größenordnung der Kontrollen in der Steuer Baum.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top