2016-11-04 11 views
0

現在、私はユーザーがレストランの注文を選択できるアプリケーションを開発中です。ユーザーがオーダーをクリックしてサブミットをクリックすると、「order.xml」というXMLファイルに追加されます。これは何が起こるかです。ただし、同じクリックで、ファイルに入力されたものは、同じビューのテキストボックスに表示されます。 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"というエラーが表示されます。下に示すコードで...Visual StudioでC#でテキストボックスにXMLデータを表示する2015

var order = from MenuInfo in doc.Descendants("MenuInfo") 
         select new 
         { 
          Data1 = MenuInfo.Element("Data1").Value, 
          Data2 = MenuInfo.Element("Data2").Value, 
          Data3 = MenuInfo.Element("Data3").Value, 
         }; 

私は踏み台にいるときにこれをデバッグするのに役立つでしょうか?

完全なコードサンプル

XDocument doc = XDocument.Load("order.xml"); 
     XElement root = new XElement("MenuInfo"); 
     root.Add(new XElement("Data1", mealListView.SelectedValue.ToString())); 
     root.Add(new XElement("Data2", _seat)); 
     root.Add(new XElement("Data3", buttonTable1.Text)); 
     doc.Element("MenuInfo").Add(root); 
     doc.Save("order.xml"); 

     var order = from MenuInfo in doc.Descendants("MenuInfo") 
         select new 
         { 
          Data1 = MenuInfo.Element("Data1").Value, 
          Data2 = MenuInfo.Element("Data2").Value, 
          Data3 = MenuInfo.Element("Data3").Value, 
         }; 

     summaryTextBox.Text = ""; 
     foreach (var MenuInfo in order) 
     { 
      summaryTextBox.Text = summaryTextBox.Text + "Meal: " + MenuInfo.Data1 + "\n"; 
      summaryTextBox.Text = summaryTextBox.Text + " Seat ID: " + MenuInfo.Data2 + "\n"; 
      summaryTextBox.Text = summaryTextBox.Text + " Table ID: " + MenuInfo.Data3 + "\n"; 
     } 

     if (summaryTextBox.Text == "") 
      summaryTextBox.Text = "No Results."; 
+0

@Darren「新しいコードを選択する」とは、エラーが発生する場所です。残念ながら、私はC#を初めて使用しているので、このコードをデバッグする方法にあまり慣れていません。 –

+0

XMLを保存する場所にブレークポイントを設定してから、その構造の代表的なサンプルを質問に追加してください。これは間違いなく調査を助けるでしょう。私は私の答えのための推測推測をしました。 –

+0

私の回答はどのような点で助けになりましたか?それが有用かどうかを知ることは有用であろう。 –

答えて

0

私は問題が何であるかを100%確実ではないんだけど、私はそれが次のように関連しているかもしれないと思います。

あなたは新しい要素を作成するには、root変数としてMenuInfoと呼ば:だから今

doc.Element("MenuInfo").Add(root); 

XElement root = new XElement("MenuInfo"); 

後で、その後もMenuInfo呼ばれるXML内の別の要素にこの新しい要素を追加しますおそらくMenuInfoという要素があり、次のようにMenuInfoという子要素があります。

あなたのその後の選択で
<MenuInfo> 
    <MenuInfo> 
     <Data1>one</Data1> 
     <Data2>two</Data2> 
     <Data3>three</Data3> 
    </MenuInfo> 
</MenuInfo> 

、あなたはその後、

select new 
{ 
    Data1 = MenuInfo.Element("Data1").Value, 
    Data2 = MenuInfo.Element("Data2").Value, 
    Data3 = MenuInfo.Element("Data3").Value, 
}; 

を行うときに、あなたがValueにアクセスしようとしている、任意のData1Data2またはData3子要素を持たない親MenuInfo要素を選択します存在しない要素のプロパティ。

ロード直後にMenuInfo要素をXMLに配置した方がよい場合があります。存在しない場合は作成してください。それ以外の場合は、既に存在する要素にDataN要素を追加してください。

関連する問題