2012-12-12 2 views
0

ASP.NET 사이트에서 gridview가 있습니다.ASP.NET 동적 체크 박스 또는 드롭 다운리스트

는 잘 작동 지금 TemplateField을있다 -이 설문 조사 양식이며, 기본 질문으로 사용하여 텍스트 상자를 응답합니다 :

<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> 
    </ItemTemplate> 
<EditItemTemplate> 
     <asp:TextBox ID="txtAnswer" Text='<%# Bind("Answer") %>' runat="server" 
     TextMode="MultiLine" Height="76px" MaxLength="2000" Width="377px"> 
     </asp:TextBox> 
</EditItemTemplate> 
</asp:TemplateField> 

요구 사항 지금 dropdownlists 응답 할 수있다 새로운 질문을 추가하는 것입니다. 나는 이것을하는 방법에 대한 아이디어를 가지고있다. (질문 번호를 함수에 전달하고 다른 테이블에 저장된 드롭 다운 응답의 존재 여부를 확인한다.)하지만 질문 유형에 따라 templatefield를 동적으로 업데이트하는 데 어려움을 겪고있다. ... 어떤 제안이라도?

UPDATE 나는이 부분적으로 도우미 기능을 통해 작업을 얻을 수 있었다. (아마도 내 최선의 코드는 아니지만 거의 완료되고있다.) 문제는 실제 컨트롤 (Textboxes 또는 dropdownlists) 대신 출력에 내 타입을 알려주는 문자열을 얻는 것입니다. 어떻게 수정할 수 있습니까? ?

public Control GetAnswerControl(string QuestionID, string Answer) 
{ 
    List<ListItem> lstOptions = new List<ListItem>(); 

    SqlCommand cmd = new SqlCommand("pDropDownAnswers_Get", functions.NewSupplierRequest); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@QuestionID", SqlDbType.Int); 
    cmd.Parameters["@QuestionID"].Value = Int32.Parse(QuestionID); 

    try 
    { 
     functions.NewSupplierRequest.Open(); 
     SqlDataReader r = cmd.ExecuteReader(); 
     while (r.Read()) 
     { 
      lstOptions.Add(new ListItem(r["DropDownAnswer"].ToString(), r["DropDownAnswer"].ToString())); 
     } 
    } 
    catch (Exception err) 
    { 
     this.lblError.Text = err.Message; 
    } 
    finally 
    { 
     functions.NewSupplierRequest.Close(); 
    } 

    if (lstOptions.Count == 0) 
    { 
     TextBox tb = new TextBox(); 
     tb.ID = "txtAnswer"; 
     tb.Text = Answer; 
     tb.TextMode = TextBoxMode.MultiLine; 
     tb.Height = 76; 
     tb.Width = 377; 
     tb.MaxLength = 2000; 

     return tb; 
    } 
    else 
    { 
     DropDownList dl = new DropDownList(); 
     dl.DataSource = lstOptions; 
     dl.DataBind(); 
     dl.SelectedValue = Answer; 
     return dl; 
    } 
} 
+0

자바 스크립트를 사용하고 계십니까? – Smoore

+0

지금은 아니요 ... 그냥 바로 ASP.NET 코드입니다. – Tim

답변

0

나는이 다른 접근 방식에서 작동하도록 점점 상처는 ...

  1. 먼저 나는 ID를
  2. 을 질문 ID를 보유하고 답변을 몇 가지 숨겨진 필드와있는 gridview에 자리를 설정 그런 다음 ID를 부여하고 숨겨진 필드에서 답변을 그리는 gridview 행을 반복하는 도우미 함수를 만들었습니다.
  3. 코드 숨김에서 자리 표시 자에 컨트롤을 추가하면 실제 얻은 문자열이 아닌 컨트롤로 표시됩니다.