2010-11-30 8 views
0

XMLのノードの内容をドロップダウンリストにバインドしようとしています。xmlノードの子をASP.Net DropDownListにバインドする

当初は、XML文書全体がリピータにバインドされている - これは完璧に動作し、しかし今、私は「」ノードの子供たちに基づいて、ドロップダウンリストを表示する必要があるが、私は、ルートレベルでデータを取得します無効です。行1、dropDownListのDataBind()メソッドの位置1エラーメッセージ。

誰でも私が間違っていることを教えてもらえますか?

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は、このようです::

私が使用しているコードスニペットは、私が先頭に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> 
+0

いいえ、XMLはAT ALLをフォーマットしていませんでした... – Gem

+0

XMLを正しく追加する方法を知っている人は、明らかにコードタグとして感謝しています... – Gem

+0

code、xmlを含む少なくとも4つのスペースをインデントすることによってフォーマットされます。 –

答えて

0

xmlドキュメント賢い

ただし、質問と回答のアンケートオブジェクトとクラスを作成し、それをデシリアライズしてXMLをクラスに変換するのが最も効果的です。次に、アンケートの質問をドロップダウンリストにバインドすることができます。基本的には、オブジェクトを作成するために最初に実行した作業の後に、負荷が上がりやすくなります。

関連する問題