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);
}
해결책
리피터 컨트롤 사용 :
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에 객체가 추가되는 순서는 컨트롤 트리의 컨트롤 순서에 따라 다릅니다.
제휴하지 않습니다 StackOverflow