добавление элементов управления зависит от таблицы SQL?

StackOverflow https://stackoverflow.com/questions/1004595

  •  05-07-2019
  •  | 
  •  

Вопрос

Привет всем. Я работаю над небольшим проектом, в котором я добавляю элементы управления на страницу на основе таблицы вопросов 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);

    }
Это было полезно?

Решение

Используйте элемент управления 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();

Другие советы

Если элементы управления либо используют ViewState, либо вносят в него свой вклад, то вы должны убедиться, что одни и те же элементы управления добавляются в ViewState в том же порядке в каждой обратной публикации. Порядок, в котором объекты добавляются в ViewState, зависит от порядка элементов управления в дереве элементов управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top