asp.net在动态填充/创建的radiobuttonlist

时间:2015-11-13 11:24:52

标签: c# asp.net dynamic user-controls

我希望以前没有问过这个问题,如果有的话,我很遗憾找不到它!

我目前正在尝试创建一个用户控件,我希望客户端从dropdown菜单中选择一个问卷调查表,该调度表在page_load上动态填充,如下所示:

      DiscoverConnectData(); //gets the items from a database
      var formItems = 0;
      using (var osContext = new OrganizationServiceContext(_crmAccessor.OrganisationService))
        {
          var forms = (from f in osContext.CreateQuery("form") select f);

          foreach (var form in forms)
          {
              var name = formulier.GetAttributeValue<string>("name");
              var formId = formulier.GetAttributeValue<Guid>("formid");
              DropDownList_RP.Items.Insert(formItems, new ListItem(naam, formId.ToString()));
              formItems++;
          }
      }

我也尝试将上面的代码放在if(!Page.IsPostBack)中,但是这并没有解决我的问题......好的,继续前进。当客户选择了调查问卷并点击按钮时,我有一段代码贯穿每个循环中与该特定调查问卷相关的所有问题和答案,并为每个问题创建标签和RadioButtonLists。首先,它加载与所选formId相关的问题和答案:

        var curQuestionName = string.Empty;
        var lblId = 0;
        _formGuid = new Guid(DropDownList_RP.SelectedValue);

        DiscoverConnectData();

        using (var osContext = new OrganizationServiceContext(_crmAccessor.OrganisationService))
        {
            _answerList =
                (from a in osContext.CreateQuery("answer")
                 join v in osContext.CreateQuery("question")
                 on a["question"] equals v["questionid"]
                 where ((EntityReference)v["form"]).Id == _formGuid
                 select new AnswerClass
                 {
                     AnswerQuestionId = v.GetAttributeValue<Guid>("questionid"),
                     QuestionName = v.GetAttributeValue<string>("name"),
                     Name = a.GetAttributeValue<string>("ansname"),
                     Score = a.GetAttributeValue<int>("score")
                 }).ToList();
        }

在获取此数据并将其添加到列表后,我创建了问卷调查项目:

    foreach (var ant in _answerList)
        {
            if (ant.QuestionName != curQuestionName)
            {
                var vLabel = new Label();
                var qid = "Q" + lblId;
                vLabel.ID = qid;
                vLabel.Text = ant.QuestionName;
                Questionnaire.Controls.Add(vLabel);

                _aRadioList = new RadioButtonList();
                var rblId = "list" + lblId;
                _aRadioList.ID = rblId;
                Questionnaire.Controls.Add(_aRadioList);
                Questionnaire.Controls.Add(new LiteralControl("<br />"));

                curQuestionName = ant.QuestionName;
                lblId++;
            }
            _aRadioList.Items.Add(new ListItem((" " + ant.Name), ant.Score.ToString()));
        }

这一切都很好,我得到的问题和答案清单整齐地放在彼此之下。到目前为止一切都很好!

然而,我遇到的一个大问题是页面回发上的数据丢失。每当用户选择某些答案,然后我想向他们展示分数,或者做任何其他事情时 - 页面重新加载,我所有动态添加的控件都会丢失。现在我已经修复了这个问题,将相关功能放在一个函数中,当我按下按钮显示分数时再次调用它,这会重新创建问题和答案,但是我丢失了所有选定的值。我甚至不需要在页面或任何内容上保留控件,我只需要保留选定的值以便用它们来做任务!

我无法在page_load或page_init上创建控件,因为我需要用户输入才能确切地知道要从数据库中提取哪些调查问卷。我无法使用&#34;硬编码&#34;下拉列表项的值也是,因为这不是我们的目标功能。我们需要从数据库中提取所有内容 - 我无法直接访问,我需要使用DiscoverConnectData()函数。

如果有任何想法可以获得我想要的功能(如果它意味着探索一个全新的&#39;大道&#39;),请告诉我!

0 个答案:

没有答案