2010-11-30 9 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를 모두 포맷하지 않았습니다 ... – Gem

+0

누군가 XML을 올바르게 추가하는 방법을 알고 있다면 분명히 코드 태그를 잘라내 지 않아서 고맙겠습니다 ... – Gem

+0

코드, xml 포함 적어도 4 칸을 들여서 서식을 지정합니다. –

답변

0

xml 문서 영리한.

그러나이 작업을 수행하는 가장 좋은 방법은 설문지 개체와 질문 및 답변 클래스를 만든 다음 XML을 deserialize하여 클래스로 변환하는 것입니다. 그런 다음 설문지의 질문을 드롭 다운 목록에 바인딩 할 수 있으며 기본적으로 객체를 생성하기 위해 수행해야하는 초기 작업 후에로드가 더 쉽고 쉬워집니다.

관련 문제