Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为管理部分创建调查问题/答案_C#_Asp.net - Fatal编程技术网

C# 为管理部分创建调查问题/答案

C# 为管理部分创建调查问题/答案,c#,asp.net,C#,Asp.net,我正在为我的公司开发一个应用程序,在这个应用程序中,我一直在思考做这件事的最佳方法是什么 该公司已经有了一个调查页面,可供选择15个问题。现在我已经被要求开发一个应用程序,以便从管理部分,他们可以修改现有的问题和他们的选项,也可以添加更多的问题和选项 我不确定这样做的最佳方法是什么。我在考虑在管理部分创建一个页面,在那里他们可以看到现有的问题和答案选项,如果他们修改它,我可以直接在数据库中更改它,如果他们添加更多的问题,我可以在数据库中创建自定义问题字段。对于答案选项,我不会在数据库中创建任何字

我正在为我的公司开发一个应用程序,在这个应用程序中,我一直在思考做这件事的最佳方法是什么

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

我不确定这样做的最佳方法是什么。我在考虑在管理部分创建一个页面,在那里他们可以看到现有的问题和答案选项,如果他们修改它,我可以直接在数据库中更改它,如果他们添加更多的问题,我可以在数据库中创建自定义问题字段。对于答案选项,我不会在数据库中创建任何字段,因为我会动态生成文本框、复选框、单选按钮等选项。。当用户选择答案时,我会将所有选择的答案放入数据库

编辑 =======

我只想给管理员3个选项添加选项(复选框,收音机,文本框) 我对如何使用泛型动态创建控件感到困惑。like admin可以像CreateControls(TextBox、NoOfOptions、List)一样在方法中传递值

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

我正在使用VS2010、.Net 4.0、SQL server 208 R2来实现此应用程序


请给我一些建议。任何工作示例链接都将不胜感激。

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

在您的情况下,我们可以遵循以下步骤:

管理端:

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

    }
}
使用唯一值指定每个控件,该值可以是数字或控件名称。将其保存在带有问题id的表中

客户端:

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

    }
}
1.)获取转发器。在项目模板中获取以下控件:

a、 )标签(您的自定义问题)

b、 )文本框(可见假)

c、 )复选框(可见假)

d、 )单选按钮(可见假)等

2.)将此重读器与问题表绑定

3.)现在激发rowdatabound事件,并根据问题id设置控件的可见性

如果您有任何疑问,请询问

更新:

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

    }
}
现在请检查我昨天讨论的整个流程的实施情况:

用作测试数据库的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>
       <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>
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;
        }

    }
}

希望这对您有所帮助:-)

最漂亮的方法是编写一个网络控件。将其放置在中继器的ItemTemplate中。中继器将执行数据绑定工作,其中网络控件将呈现每个问题的问题和答案字段

我现在可以想象的是,您的数据源(绑定到另一个中继器)必须至少具有:

  • QuestionID-用于识别问题
  • 问题-这包含问题
  • ResponseType-这只是一个标志,用于确定是将textbox、radio还是checkbox呈现为应答字段
  • webcontrol必须至少具有以下属性:

  • 问题号
  • 问题:
  • 响应类型
  • 用户应答
  • 选择-选择的集合
  • 在中继器的itemdatabound事件期间,获取itemtemplate中的webcontrol实例。将绑定的DataItem中的questionid和question分配给相应的webcontrol属性。然后检查AnswerType。如果是radio或checkbox,则从db/xml中检索此特定questionid的选项,并将其分配给web控制选项属性

    现在,在webcontrol的
    RenderContents
    事件中:

  • 写下问题
  • 如果AnswerType为textbox,则写入textarea或textbox元素
  • 如果AnswerType为radio或checkbox,则迭代Choices属性以呈现相应的输入标记
  • 无论如何,如果你使用这种方法,管理员可以为每个问题设置无限数量的选项。每个问题都可以有灵活性。图像可以附加到问题上,即使是像IQ测试这样的选项


    然而,网络控件中还有很多代码需要编写,比如,维护回发、现场验证等数据。

    主要问题是管理员如何选择要显示的控件并在此处生成控件?我说得对吗?是的。管理员可以选择与问题相关的控件。可以是复选框、文本框、radiobutton。我需要创建一个根据所选内容确定控件的编号并给它们值。我今晚将尝试此操作。将让您知道它是如何运行的,我正在等待您的答复。如果您仍然面临任何问题,请让我知道。这是否可能使用泛型方法?。就像我不必指定要创建的类型一样。例如,一个创建Checkbo的方法x、 文本框,收音机列表中有多少个控件?只有这三个或更多?请用最新的代码更新您的问题,以便我检查。让我们来看看