为行政部门创建调查问题/答案

本文关键字:答案 问题 调查 行政部门 创建 | 更新日期: 2023-09-27 18:08:41

我正在为我的公司开发一个应用程序,我一直在思考什么是最好的方法。

该公司已经有了一个关于15个多选题的调查页面。现在我被要求开发一个应用程序,以便从管理部分他们可以修改现有的问题和他们的选项,他们也可以添加更多的问题和选项。

我不确定做这件事的最好方法是什么。我想在管理部分创建一个页面,他们可以看到现有的问题和答案选项,如果他们修改它,我可以直接改变它在数据库中,如果他们添加更多的问题,我可以去创建一个自定义的问题字段在数据库中。对于答案选项,我不会在数据库中创建任何字段,因为我会动态地生成文本框,复选框,单选按钮等选项。当用户选择的答案,我会把只有选择的答案在数据库中。

<标题>编辑

=======

我只是想给admin只3个选项添加选项(复选框,无线电,文本框)

我很困惑如何使用泛型动态创建控件。像admin可以在方法中传递值,就像这样createcontrol (TextBox, NoOfOptions, List)

请原谅我没有在我的问题中添加任何代码,因为我还没有开始处理这个问题,并且停留在思考过程的第一阶段。

我使用VS2010, . net 4.0, SQL server 208 R2。

请建议。

为行政部门创建调查问题/答案

我有一个想法。我已经完成了这种功能,但在我的情况下,每个自定义问题仅与文本框绑定。

在你的情况下,我们可以按照以下步骤:

Admin End:

为每个控件指定唯一的值,可以是编号或控件名称。将此保存在带有问题id的表中。

客户端:

1)。中继器。在item模板中采用以下控件:

)。标签(自定义问题)

b.)文本框(可见false)

c.)复选框(可见false)

d.)单选按钮(可见false)等

2)。将这个重复器与questions表绑定。

3)。现在触发行数据绑定事件,并根据问题id设置控件的可见性。

希望这对你有帮助,如果你有任何疑问,请问。

更新:

现在请检查我昨天讨论的整个流程的执行情况:

XML文件用作测试数据库:

<?xml version="1.0" encoding="iso-8859-1"?>
 <catalog>
  <cd>
  <id>1</id>
  <title>Question 1</title>
  <ctrl>1</ctrl>
 </cd>
 <cd>
  <id>2</id>
  <title>Question change</title>
  <ctrl>2</ctrl>
 </cd>
  <cd>
   <id>3</id>
   <title>Question 3</title>
  <ctrl>3</ctrl>
  </cd>
 <cd>
   <id>4</id>
   <title>Question 4</title>
  <ctrl>2</ctrl>
 </cd>

ASPX page:

       <asp:Repeater ID="Repeater1" runat="server" 
        onitemdatabound="Repeater1_ItemDataBound">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <asp:Label ID="Label1" runat="server" Text='<%#Eval("id") %>'></asp:Label>
                    <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("ctrl") %>' />
                </td>
                 <td>
                  <asp:Label ID="Label2" runat="server" Text='<%#Eval("title") %>'></asp:Label>
                 </td>
                <td>
                    <asp:TextBox ID="TextBox1" runat="server" Visible="false"></asp:TextBox>
                </td>
                <td>
                    <asp:RadioButton ID="RadioButton1" runat="server" Checked="true" Text="YES" TextAlign="Left" Visible="false" />
                    <asp:RadioButton ID="RadioButton2" runat="server" Text="NO" TextAlign="Left" Visible="false" />
                </td>
                <td>
                    <asp:CheckBox ID="CheckBox1" runat="server" Visible="false" />
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
      </asp:Repeater>

CS file:

if (!IsPostBack)
    {
        DataSet ds = new DataSet();
        ds.ReadXml(MapPath("XMLFile.xml"));
        Repeater1.DataSource = ds;
        Repeater1.DataBind();
    }
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        HiddenField ctrl = (HiddenField)e.Item.FindControl("HiddenField1");
        if (ctrl.Value == "1")//1 for Textbox
        {
            TextBox txtCtrl = (TextBox)e.Item.FindControl("TextBox1");
            txtCtrl.Visible = true;
        }
        else if (ctrl.Value == "3")//3 for Radio Button
        {
            RadioButton rdbYCtrl = (RadioButton)e.Item.FindControl("RadioButton1");
            RadioButton rdbNCtrl = (RadioButton)e.Item.FindControl("RadioButton2");
            rdbYCtrl.Visible = true;
            rdbNCtrl.Visible = true;
        }
        else if(ctrl.Value == "2")//2 for Chackbox
        {
             CheckBox chkCtrl = (CheckBox)e.Item.FindControl("CheckBox1");
             chkCtrl.Visible = true;
        }
    }
}

希望这对你有帮助:-)

最好的方法是写一个web控件。将它放在Repeater的ItemTemplate中。中继器将完成数据绑定工作,而webcontrol将呈现每个问题的问题和答案字段。

我现在能想到的是,你的数据源(绑定到他们的中继器)必须至少有:

  1. QuestionID -用于识别问题
  2. Question -包含
  3. 问题
  4. ResponseType -这只是一个标志,以确定是否呈现文本框,单选或复选框作为答案字段/s

webcontrol必须至少有这些属性:

  1. QuestionID
  2. ResponseType
  3. UserAnswer
  4. 选项-选项集合

在repeater的itemdataboundevent中,获取itemtemplate中的webcontrol实例。将绑定DataItem中的questionid和question分配给各自的webcontrol属性。然后检查AnswerType。如果是单选或复选框,则从db/xml中检索该特定questionid的选项,并将其分配给webcontrol choices属性。

现在在webcontrol的RenderContents事件:

  1. 写问题
  2. 如果AnswerType为textbox,则写入textarea或textbox元素
  3. 如果AnswerType是单选或复选框,迭代Choices属性来呈现相应的输入标签。

无论如何,如果你使用这种方法,管理员可以为每个问题设置无限数量的选项。每个问题都可以有灵活性。图片可以附在问题上,甚至像智商测试那样的选择。

然而,在webcontrol中还有很多代码需要编写,比如,维护回发数据,字段验证等。