2012-12-14 25 views
2

空我已經在ASP.NET數據網格以下代碼:佔位符控制集合在回發

<asp:TemplateField HeaderText="" Visible="True" > 
          <ItemTemplate> 
          <%--<asp:TextBox ID="txtAnswer" Text='<%# Bind("Answer") %>' runat="server" 
             TextMode="MultiLine" Height="76px" MaxLength="2000" Width="377px" > 
          </asp:TextBox>--%> 
          <asp:HiddenField ID="hfQuestionID" Value='<%# Bind("QuestionID") %>' runat="server" /> 
          <asp:HiddenField ID="hfAnswerID" Value='<%# Bind("AnswerID") %>' runat="server" /> 
          <asp:HiddenField ID="hfAnswer" Value='<%# Bind("Answer") %>' runat="server" /> 
          <asp:PlaceHolder ID="ph1" runat="server" /> 
          <%--<%# GetAnswerControl(DataBinder.Eval(Container.DataItem,"QuestionID").ToString(), 
           DataBinder.Eval(Container.DataItem,"Answer").ToString()) %>--%> 
          </ItemTemplate> 
          <EditItemTemplate> 
          <asp:HiddenField ID="hfQuestionID" Value='<%# Bind("QuestionID") %>' runat="server" /> 
          <asp:HiddenField ID="hfAnswerID" Value='<%# Bind("AnswerID") %>' runat="server" /> 
          <asp:HiddenField ID="hfAnswer" Value='<%# Bind("Answer") %>' runat="server" /> 
          <asp:PlaceHolder ID="ph1" runat="server" /> 
           <%--<asp:TextBox ID="txtAnswer" Text='<%# Bind("Answer") %>' runat="server" 
             TextMode="MultiLine" Height="76px" MaxLength="2000" Width="377px" ></asp:TextBox>--%> 
          </EditItemTemplate> 
         </asp:TemplateField> 

佔位符被動態填充具有取決於答案的類型或者一個文本框或下拉列表,用戶需要給。呈現初始答案字段(文本框或下拉列表)的代碼正常工作。

但是,當我觸發我的按鈕單擊事件時,佔位符的控件屬性始終爲空。這是爲什麼發生?我一直在困擾着我的大腦幾天,這對我來說沒有任何意義。

我試圖訪問數據網格的動態添加控件的代碼片段如下...我做錯了什麼?

foreach (GridViewRow r in gridUserSupplierTypeQuestionsAndAnswers.Rows) 
     //if (IsRowModified(r)) 
     //{ 
     // gridUserSupplierTypeQuestionsAndAnswers.UpdateRow(r.RowIndex, false); 
     //} 
     { 
      PlaceHolder ph =(PlaceHolder) r.FindControl("ph1"); 
      Control c = ph.FindControl("Answer"); 
      string answer = string.Empty; 
      if(c.GetType() == typeof(TextBox)) 
      { 
       TextBox tb = (TextBox) c; 
       answer = tb.Text; 
      } 
      else if (c.GetType() == typeof(DropDownList)) 
      { 
       DropDownList dl = (DropDownList)c; 
       answer = dl.SelectedValue; 
      } 
+4

動態創建的控件必須創建每一個後回...做一次是不夠的。這是假設你正在做的! – freefaller

+0

僅供參考:http://forums.asp.net/t/1098870.aspx/1 –

+0

@JasonEvans,你們不應該在回答中發佈這個問題嗎?我認爲這將有助於未來找到這個問題的人。 – jmrnet

回答

0

我最終放棄了佔位符,而是用兩個控件 - 一個文本框和一個下拉列表 - 將其可見性設置爲false。

我將答案類型存儲在數據庫中,並根據該值通過幫助器函數打開相應的控件。有可能更優雅的方式來處理這一點,但我時間緊,只是需要得到這個工作。