0

我在 ASP.NET 站点中有一个 gridview。

现在有一个 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>

现在的要求是添加可以由下拉列表回答的新问题。我对如何做到这一点有一个想法(将问题编号传递给一个函数并检查是否存在存储在另一个表中的下拉答案),但我正在努力根据问题类型动态更新模板字段...有什么建议么?

更新

我设法通过一个辅助函数来部分工作。(可能不是我最好的代码,但它几乎可以完成工作)问题是我得到一个字符串,告诉我输出中的类型而不是实际控件(分别为文本框或下拉列表)......我该如何纠正?

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

1 回答 1

0

我最终让这个以不同的方法工作......

  1. 首先,我在 gridview 中设置了一些隐藏字段和一个占位符来保存问题 ID 和答案 ID
  2. 然后我创建了一个辅助函数来遍历 gridview 的行,从隐藏字段中获取 ID 和答案。
  3. 从代码隐藏将控件添加到占位符实际上将它们格式化为控件,而不是我得到的字符串。
于 2012-12-12T19:05:31.183 回答