2013-04-11 71 views
0

我正在爲我的公司開發一個應用程序,我堅持認爲這樣做最好的方法是什麼。爲管理員部分創建調查問題/答案

該公司已有一個調查頁面,包含15個有多個選擇的問題。現在我被要求開發一個應用程序,以便從管理部分他們可以修改現有的問題和他們的選項,也可以添加更多的問題和選項。

我不知道這樣做的最佳方法是什麼。我想在管理部分創建一個頁面,他們可以看到現有的問題和答案選項,如果他們修改它,我可以直接在數據庫中更改它,如果他們添加更多的問題,我可以去數據庫中創建一個自定義問題字段。對於答案選項,我不會在數據庫中創建任何字段,因爲我會像文本框,複選框,單選按鈕等動態生成選項。當用戶選擇答案時,我將在數據庫中插入選定的答案。

編輯

=======

我只是想給管理員只有3個選項中添加選項(複選框,收音機,文本框)

我很困惑,如何創建使用泛型來動態控制。如管理員可以在值傳遞這樣CreateControls方法(文本框,NoOfOptions,列表)

請原諒我在我的問題不添加任何代碼,因爲我還沒有開始這方面的工作,並停留在第一階段思維過程。

我正在爲此應用程序使用VS2010,.Net 4.0,SQL Server 208 R2。

請指教。任何工作示例鏈接將不勝感激。

+0

主要問題是要管理選擇控制如何顯示和在這裏生成的控制?我對 ? – Sunny 2013-04-11 09:33:18

+0

是的。管理員可以選擇哪個控件與問題一起使用。它可能是複選框,文本框,單選按鈕。我需要根據選擇創建任何控制,並給它們賦值。 – 2013-04-11 09:54:22

回答

1

我對此有一個想法。我已經完成了這種功能,但在我的情況下,每個自定義問題只與文本框綁定。

在你的情況下,我們可以按照下列步驟操作:

管理員結束:

指定具有獨特的價值每一個控制它可能是與問題ID表數量或控制name.Save這一點。

客戶端:

1)採取repeater.In項目模板採取以下控制:。

一)標籤(您的自定義的問題)

B)文本框(上可見的僞)

℃。)的複選框(可見假)

d。)單選按鈕(可見假)等

2.)綁定這個中繼器的問題表。

3.)現在引發rowdatabound事件並根據問題ID設置控件的可見性。

這可以幫助你,如果你有任何疑問,請詢問。

UPDATE:

現在請我昨天就已經討論了整個過程的實現:

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頁面:

 <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文件:

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

    } 
} 

希望這有助於你現在:-)

+0

我今晚要試試這個..會讓你知道它是怎麼回事 – 2013-04-11 13:54:46

+0

好吧,我在等你的答覆。如果你仍然遇到任何問題,請讓我知道。 – Sunny 2013-04-12 07:02:43

+0

這是可能的使用泛型方法?..就像我不必指定我想要創建的類型。即創建複選框,文本框,收音機的一種方法 – 2013-04-12 08:14:26

1

最漂亮的方式做到這一點是寫三夏。將它放在中繼器的ItemTemplate中。轉發器將完成數據綁定工作,因爲webcontrol將爲每個問題提供問題和答案字段。

我可以在momment時,您的數據源(綁定到療法中繼想象什麼是必須至少有:

  1. QuestionID - 這是找出問題
  2. 問題 - 這包含的問題
  3. 的responseType - 這僅僅是一個標誌,以確定是否呈現文本框,單選或多選的答案場/秒

的夏精必須至少有這些prope rties:

  1. QuestionID
  2. 問題
  3. 的responseType
  4. UserAnswer
  5. 選擇 - 選擇

的收集過程中的ItemDataBound中繼器的情況下,在ItemTemplate獲得三夏實例。將綁定的DataItem的questionid和question分配給相應的webcontrol屬性。然後檢查AnswerType。如果它是radio或checkbox,則從db/xml中爲這個特定的問題提取選項,並將其分配給webcontrol Choices屬性。

現在在三夏的RenderContents事件:

  1. 寫的問題
  2. 如果AnswerType是文本,寫文本域或文本框元素
  3. 如果AnswerType是無線電或複選框,迭代選擇屬性,以使各自的輸入標籤。

無論如何,如果您使用這種方法,管理員可以爲每個問題設置無限數量的選擇。每個問題都可以有靈活性。圖像可以附加到問題上,即使像IQ測試這樣的選擇。

然而,也有很多在三夏喜歡寫代碼,保持在回發,fieldvalidation等數據