【C#,WinForms】XMLデータをListViewに表示し、チェック項目のみXML保存させる

公開日: : 最終更新日:2015/10/20 Blog, Microsoft ,

MSDNフォーラムの以下についてサンプルを組んだので掲載。

ListViewでチェックされた値をXMLファイルから読み込む方法

XMLから読み込んだ独自クラスのリストをListViewに表示。
保存ボタン押下時にチェックされている項目のみをXMLに保存する。
Xmlの保存はXmlSerializerを使った。
※パスの存在チェックなどは行っていないので注意

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        listView1.GridLines = true;
        listView1.View = View.Details;
        listView1.Columns.Add("FullName");
        listView1.Columns.Add("Age");
        listView1.CheckBoxes = true;

        foreach(var user in LoadUser())
        {
            listView1.Items.Add(new UserItem(user));
        }
    }

    private const string filePath = @"C:\hoge\hoge.xml";

    private List<User> LoadUser()
    {
        var serializer = new XmlSerializer(typeof(List<User>));
        if(!File.Exists(filePath))
        {
            var newUsers = new List<User>();
            newUsers.Add(new User() { FullName = "田中1", Age = 20, Address = "千葉1" });
            newUsers.Add(new User() { FullName = "田中2", Age = 21, Address = "千葉2" });
            newUsers.Add(new User() { FullName = "田中3", Age = 22, Address = "千葉3" });
            return newUsers;
        }
        using(var reader = new StreamReader(filePath))
        {
            return (List<User>)serializer.Deserialize(reader);
        }
    }

    private void SaveUser(List<User> users)
    {
        var serializer = new XmlSerializer(typeof(List<User>));
        using(var writer = new StreamWriter(filePath))
        {
            serializer.Serialize(writer, users);
        }
    }

    private class UserItem : ListViewItem
    {
        public UserItem(User args) 
        {
            this.Text = args.FullName;
            this.SubItems.Add(args.Age.ToString());
            this.Tag = args;
        }
        public User GetUser()
        {
            return (User)this.Tag;
        }
    }

    public class User
    {
        public string FullName { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var saveUsers = new List<User>();
        foreach(UserItem current in listView1.CheckedItems)
        {
            saveUsers.Add(current.GetUser());
        }
        SaveUser(saveUsers);
        Console.WriteLine("保存しました.");
    }
}

WPFだと思いこんで一発目の回答でWPFのコードを提示してしまった。反省。
次回にWPFのコードも一応残しておこう。

関連記事

no image

【.NET】正規表現の復習

正規表現エンジン System.Text.RegularExpressions.Regexオブジェ

記事を読む

Xamarin.Forms + Visual Studio Team Services ビルドタスクで自動バージョンアップ

Visual Studio Team Services で Xamarin.Forms の継続的デリ

記事を読む

no image

FixedDocumentの印刷およびXPS形式での保存

こんにちは。 以前、XAMLファイルを帳票テンプレートとして動的ロードする記事を掲載しました。

記事を読む

UWPでユニットテスト

ユニバーサルWindowsのアプリケーションプロジェクトおよびクラスライブラリプロジェクトのユニット

記事を読む

no image

【iPhoneアプリ】Nend広告の実装メモ

広告枠の作成 https://www.nend.net/ 審査前アプリのURL iPhon

記事を読む

拡張温度に対応した Windows 10 IoT Core ボード

Windows 10 IoT Core 対応ボード その2 こっちは拡張温度対応している。 Ban

記事を読む

UWPをHockeyApp対応させる

走り書きメモ。 UWPをHockeyApp対応させるためにはNuGetパッケージを使ってモジュール

記事を読む

【WPF/XAML】チェックボックスのデザイン変更

[xml] <Window x:Class="Sample"

記事を読む

【.NET Framework 4.6.1】MultiLineなTextBoxでCtrl+Aが使えない問題が解決(今更)

WinForms.NETなアプリケーションの標準TextBoxで、Multiline=Trueに設定

記事を読む

no image

【解決】Visual Studio 2015 Update1 の Xamarin.Forms でインテリセンスを使いたい

前回保留になっていた問題が解決したのでメモっときます。 Visual Studio 2015 Up

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑