2

xml の単一の「行」をリストボックス インデックスにロードしようとしています。

<?xml version="1.0" encoding="utf-8"?>
<!--User | 4/16/2013 @ 10:05 PM-->
<ContactBook>
<Contact>
<Name>
   <Name>personName</Name>
</Name>
<City>
   <City>testCity</City>
</City>
<State>
   <State>testState</State>
</State>
<Phone>
   <Phone>testPhone</Phone>
</Phone>
</Contact>
</ContactBook>

名前、都市、州、電話番号をリストボックスの 1 行に表示し、次の連絡先をリストボックスの次の行に表示したいと思います。

また、XML ファイルを上書きするのではなく、更新する方法についてのチュートリアルを示す優れたサイトがあるかどうかも知りたいです。

/コメントでの質問による編集/

どこから始めればいいのか本当にわかりませんでした。私のxmlファイルはダイアログ(クラス内のいくつかのテキストボックス)から書かれており、this.Tagはリストボックスを更新し、xmlファイルに保存します。ただし、連絡先情報の 2 番目のセットが保存されると、最初の連絡先情報は追加されずに上書きされます。

/編集/

LexeRoy のおかげで、少し理解が深まりましたが、まだハングアップしています。

private void updateXml_Click(object sender, EventArgs e)
{
    var xDoc = XDocument.Load(book);
    var listBoxItems = xDoc.Elements("Contact");
    listBox1.Items.Add(listBoxItems);
}

ここで、book は xml ファイルへのパスを表す変数であり、listBox1 は明らかです。残念ながら、ボタンをクリックすると、最初の行は次の値を取得します。

System.Xml.Linq.XContainer+<GetElements>d_11 

データソースが宣言されたので、例外がスローされます。 エラー

4

4 に答える 4

0

リストボックスに「連絡先」オブジェクトの「メンバー」(および私が推測する値) を表示したい場合、「連絡先」オブジェクトのクラスとその「メンバー」の別のクラスを作成する方法があります。

class Contact
{
    public IList<ObjectMember> Members { get; set; }
}

class ObjectMember
{
    public string Name { get; set; }
    public string Value { get;set; }
}

これらのクラスは、おそらくダイアログ内のフィールドの処理にも役立ちます。

次に、xml を読み取るときに、メンバーのリストに新しいインスタンスObjectMemberAdd作成します (または、それを得るためにうまくいくものは何でも!)。Linq to Xml は、おそらく最も簡単で楽しい方法です。

すべてのmembersListBoxがある場合、連絡先のリストにバインドできますMembersが、その実装は、WinForms または WPF レルムのどちらにいるかによって異なります。

于 2013-04-17T03:31:16.587 に答える