【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のコードも一応残しておこう。

関連記事

Xamarin.Androidで起動時にアプリケーションを起動

RECEIVE_BOOT_COMPLETEDの権限必要 ActionBootCompleted を

記事を読む

no image

属性を使って、列挙型の列挙子を並び替え、フィルタリングする

メモだよ

記事を読む

Xamarin Studio から Visual Studio for Mac へ変更してから、”The “XamlCTask” task failed unexpectedly.” が発生。

Visual Studio for Mac がGAしたので、インストールしてみた。 それまで開発して

記事を読む

【ストアアプリ】画像の光学式ズーム

こんにちは。 スマートデバイスといえばタッチ操作、ということで 今日はWindowsストアアプリ

記事を読む

no image

UWPでローカルにNoSQLデータベースを作成したい

LiteDBを使う CRUDの例 公式サンプルのとおりやるとデータソース指定のときに権限エ

記事を読む

【iPhoneアプリ】多言語対応させる2

今回はコード内の文字列を多言語化する ファイルを追加する。  

記事を読む

Xamarin.Forms出力バイナリのメモ

iOS -> .ipa, Android -> .apk ipaファイル作成方法 ソリュー

記事を読む

[OxyPlot]errro CS0117: ‘Resource.Attribute’ に ‘mediaRouteSettingsDrawable’ の定義がありません

Xamarin.Formsでグラフ描画を行う方法のひとつにOxyPlotというライブラリがある。

記事を読む

Visual Studio 2015 + PHP Tools for Visual Studio で App Service for Linux へデプロイ

発端はこれ。 https://social.msdn.microsoft.com/Forums/ja

記事を読む

no image

Microsoft.Expression.Encoderで動画のフレーム画像を取得

動画ファイルから指定したフレーム画像を取得する。 Microsoft.Expression.Enco

記事を読む

Message

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

PAGE TOP ↑