2017-05-19 1 views
0

unter aspx Kontrolle istDynamische Textbox Findcontrol ist Show null ASP.net

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

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

Ich verwende die dynamische Tabelle, die das dynamische Textfeld angezeigt werden soll. Neben diesem Textfeld habe ich eine dynamische ID für sie eingefügt. An hier arbeiten

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

Für das dynamische Textfeld ist derzeit für Benutzer zur Eingabe, wenn Schaltfläche Onclick die Textbox speichert das Steuerelement nicht finden kann, wird zeigen, immer null.

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

kann ich wissen, was das Problem ist

+0

Dynamische Steuerelemente müssen auf jeder Seite neu erstellt werden, und das enthält ein PostBack. Stellen Sie also sicher, dass 'CreateLabelQuestionNo' immer ausgelöst wird. Siehe diese Frage hier. http://stackoverflow.com/questions/44040851/my-textbox-added-programmatic-in-code-behind-after-page-reload-losess-values/44041285#44041285 – VDWWD

Antwort

0

Danke ich habe das Problem beheben. Ich setze die Funktion, um die Textbox beim Laden der Seite neu zu erstellen

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; 



    }