2017-05-19 17 views
0

である私は、ダイナミックテキストボックスを表示するには、動的テーブルを使用ダイナミックテキストボックスにFindControlは以下のショーヌルASP.net

<asp:UpdatePanel ID="pnlAnswer2" runat="server" EnableViewState="false"> 
      <ContentTemplate> 

      </ContentTemplate> 
      <Triggers> 
      <asp:PostBackTrigger ControlID="btnNext" /> 
      <asp:PostBackTrigger ControlID="btnPrevious" /> 
      </Triggers> 
    </asp:UpdatePanel>  

ASPXコントロールです。その横にあるテキストボックスには動的IDが挿入されています。ボタンは、テキストボックスコントロールを見つけることができないのonclick保存すると、ここでは、ダイナミックテキストボックスのために働く

private void LoadQuestion2(string questionSetID, int page) 
{ 
     int recPerPage = 5; 
     int fromRec = (page - 1) * recPerPage; 
     DataTable dtQuestion; 

     string sql = "SELECT * FROM SETUP_QUESTION WHERE QUESTIONSET_ID = '" + questionSetID + "' ORDER BY CAST(QUESTION_NO AS UNSIGNED) ASC LIMIT " + fromRec + "," + recPerPage; 
     dtQuestion = objDBInterface.getResults(sql); 

     foreach (DataRow row in dtQuestion.Rows) 
     { 
      CreateLabelQuestionNo(mag.nullDB2String(row, "QUESTION_NO"), mag.nullDB2String(row, "QUESTION_ID"), mag.nullDB2String(row, "QUESTIONSET_ID")); 
     } 
    } 
    private void CreateLabelQuestionNo(string questionNo, string questionid, string questionSetID) 
{ 

     TextBox txt = new TextBox(); 
     txt.ID = "txtScore" + questionNo; 
     txt.Text = "1"; 
     txt.CssClass = "txt_standard"; 
     txt.TextMode = TextBoxMode.SingleLine; 
     txt.Style.Add("width", "50px"); 
     txt.Attributes.Add("runat", "server"); 

     Table tb = new Table(); 
     tb.ID = "tbscore"; 
     tb.Attributes.Add("runat", "server"); 

     tb.BorderWidth = Unit.Pixel(0); 
     for (int i = 1; i <= 1; i++) 
     { 
      TableRow tr = new TableRow(); 
      TableCell td3 = new TableCell(); 
      td3.Controls.Add(txt); 
      td3.Style.Add("padding-top", "15px"); 
      tr.Cells.Add(td3); 
      tb.Rows.Add(tr); 
     } 
     pnlAnswer2.ContentTemplateContainer.Controls.Add(tb);  
    }  

は、現在、ユーザが入力するためのものですされてヌルを示して常にあります。

private void SaveScore(string questionSetID, int page) 
    { 
     int recPerPage = 5; 
     int fromRec = (page - 1) * recPerPage; 
     DataTable dtQuestion; 
     string value = ""; 
     string sql = "SELECT * FROM SETUP_QUESTION WHERE QUESTIONSET_ID = '" + questionSetID + "' ORDER BY CAST(QUESTION_NO AS UNSIGNED) ASC LIMIT " + fromRec + "," + recPerPage; 
     dtQuestion = objDBInterface.getResults(sql);   
     foreach (DataRow row in dtQuestion.Rows) 
     { 
      string textbox1 = "txtScore" + mag.nullDB2String(row, "QUESTION_NO"); 
      TextBox tbox = pnlAnswer2.ContentTemplateContainer.FindControl(textbox1) as TextBox; 

      string insertInputSQL = "INSERT INTO QUESTION_SCORE_JUDGE VALUES (NULL, '" 
         + Convert.ToDouble(tbox.Text) + "', NULL)"; 

        objDBInterface.ExecSQL(insertInputSQL); 
     } 
    } 

私は問題が

+0

ダイナミックコントロールはすべてのページ読み込み時に再作成する必要があり、PostBackも含みます。だから、 'CreateLabelQuestionNo'が常に起動されるようにしてください。ここのこの質問を参照してください。 http://stackoverflow.com/questions/44040851/my-textbox-added-programmatically-in-code-behind-after-page-reload-losess-values/44041285#44041285 – VDWWD

答えて

0

が何であるかを知ることができますが、私は問題を解決する必要があり、ありがとうございました。ページロード時にテキストボックスを再作成する機能を実装しました。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 

     } 
     else 
     { 

       for (int i = 1; i <= 5; i++) 
       { 
        if (pnlAnswer2.ContentTemplateContainer.FindControl("tbscore" + i) == null) 
        { 
         this.CreateTable(i); 
        } 
       } 
     } 
    } 
    private void CreateTable(int id) 
    { 
     TextBox txt = new TextBox(); 
     txt.ID = "txtScore" + id; 
     txt.CssClass = "txt_standard"; 
     txt.TextMode = TextBoxMode.SingleLine; 
     txt.Style.Add("width", "50px"); 
     txt.Attributes.Add("runat", "server"); 

     Table tb = new Table(); 
     tb.ID = "tbscore" + id; 
     tb.Attributes.Add("runat", "server"); 

     tb.BorderWidth = Unit.Pixel(0); 

     for (int i = 1; i <= 1; i++) 
     { 

      TableRow tr = new TableRow(); 

      TableCell td3 = new TableCell(); 

      td3.Controls.Add(txt); 
      td3.Style.Add("padding-top", "15px"); 

      tr.Cells.Add(td3); 

      tb.Rows.Add(tr); 
     } 

     pnlAnswer2.ContentTemplateContainer.Controls.Add(tb); 
     tb.Visible = false; 



    } 
関連する問題