Привязка дочерних узлов xml к ASP.Net DropDownList - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь связать содержимое узла XML с выпадающим списком без особого успеха.

Изначально весь документ XML привязан к повторителю - это прекрасно работает, но теперь мне нужно отобразить раскрывающийся список на основе дочерних элементов в узле "", но я получаю Данные на корневом уровне недействительны.Строка 1, сообщение об ошибке позиции 1 в методе DataBind () в dropDownList.

Может кто-нибудь сказать мне, что я делаю не так, пожалуйста ??

Фрагмент кода, который я использую::

    IXPathNavigable x = (IXPathNavigable)e.Item.DataItem;
    XPathNavigator questionNode = x.CreateNavigator();
   string question = questionNode.SelectSingleNode("questionText").ToString();

   //string title = xePage.SelectSingleNode("q").InnerText;

    Literal questionText = (Literal)e.Item.FindControl("litQuestionText");
    questionText.Text = question;
    Panel iconDiv = (Panel)e.Item.FindControl("divIcon");
    iconDiv.CssClass = string.Format("icon {0}", questionNode.SelectSingleNode("iconType"));
    Panel sliderPanel = (Panel)e.Item.FindControl("pnlSlider");
    DropDownList answerDropDown = (DropDownList)e.Item.FindControl("ddlAnswer");
    TextBox answerText = (TextBox)e.Item.FindControl("txtAnswer");

    switch (questionNode.SelectSingleNode("answerType").ToString())
    {
        case "d": 
            sliderPanel.Visible = false;
            answerText.Visible = false;
            answerDropDown.Visible = true;

            XmlDataSource answersList = new XmlDataSource();
            answersList.Data = questionNode.Select("answers").ToString();
            Response.Write(answersList.ToString());
            //XPathNodeIterator answers = questionNode.Select("answers");
            //answers.AsQueryable();
            answersList.ID = questionNode.SelectSingleNode("questionId").ToString();
            answerDropDown.DataSource = answersList;
            answerDropDown.DataTextField = "@display";
            answerDropDown.DataValueField = "@value";
            answerDropDown.DataBind();
            break;

        case "s":
            sliderPanel.Visible = true;
            answerText.Visible = false;
            answerDropDown.Visible = false;
            break;
        case "t":
            sliderPanel.Visible = false;
            answerText.Visible = true;
            answerDropDown.Visible = false;
            break;

и XML, который я использую, выглядит так:

<questions>
  <question>
    <questionId>1</questionId>
    <questionText>Question here?</questionText>
    <iconType>a</iconType>
    <answerType>d</answerType>
    <answers>
      <answer value="-3" display="Extremely badly"/>
      <answer value="-2" display="Very badly"/>
      <answer value="-1" display="Quite badly"/>
      <answer value="0" display="Neither well nor badly"/>
      <answer value="1" display="Quite well"/>
      <answer value="2" display="Very well"/>
      <answer value="3" display="Extremely well"/>
    </answers>
  </question>
  <question>
    <questionId>1</questionId>
    <questionText>Question again here?</questionText>
    <iconType>b</iconType>
    <answerType>s</answerType>
    <answers/>
  </question>
</questions>

1 Ответ

0 голосов
/ 01 декабря 2010

Очевидно, я пропустил объявление xml вверху документа xml. Clever.

Однако лучший способ добиться этого - создать объект и классы Анкеты для Вопроса и Ответа, а затем преобразовать XML в классы путем его десериализации. Затем вы можете привязать вопросы Вопросника к выпадающему списку, и он в основном работает лучше и проще после начальной работы, которую вы должны выполнить для создания объектов.

...