c#
  • asp.net
  • 2012-12-12 68 views 0 likes 
    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回答新問題。我已經知道如何做到這一點(將問題編號傳入函數並檢查是否存在存儲在另一個表中的下拉答案),但是我正在根據問題類型動態更新模板字段...有什麼建議麼?

    UPDATE

    我設法得到這部分通過一個輔助函數工作。 (可能不是我最好的代碼,但它幾乎完成了工作)事情是我得到一個字符串,告訴我在我的輸出中的類型,而不是實際的控件(分別爲文本框或下拉列表)......我該如何糾正?

    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

    您是否也在爲此使用JavaScript? – Smoore

    +0

    目前,沒有......只是直接ASP.NET代碼。 – Tim

    回答

    0

    彼時我得到這個有不同的方法工作...

    1. 首先,我設置了一些隱藏字段,並在GridView的佔位符來保存的問題和接聽ID
    2. 然後,我創建了一個輔助函數來循環訪問gridview的行,獲取ID並從隱藏字段中回答。
    3. 將控件從代碼隱藏添加到佔位符實際上將它們格式化爲控件,而不是我得到的字符串。
    相關問題