【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

【ストアアプリ】資格情報の保存と読み込み

こんにちは。 Windowsストアアプリで資格情報をセキュアに保存する方法について。

記事を読む

AdMob,Nendメディエーション時の優先順位

先日リリースしたアプリでは勉強を兼ねて、 AdMob+Nendでのメディエーション広告を実装し

記事を読む

no image

UWPでMicrosoft.OData.Clientを使用する時、LINQ式でエラー

UWPからは非同期メソッドを実行する必要があるので、通常はExecuteAsyncをコールするが、

記事を読む

【VisualStudio2015】UWPアプリケーションのXAMLデザイナにて「パッケージを登録できませんでした。」

VisualStudio2015 / UWPアプリケーション / XAMLデザイナ / エラー のメ

記事を読む

no image

RPi3 OmxPlayer / VLC Player 連続再生2回目から映像が乱れる問題

Raspberry Pi 3 Model の Ubuntu や Raspbian で OmxPlay

記事を読む

no image

【Cocos2d-x】Cocos2d-xセットアップ

メモ。Xcodeはインストール済、OSはMac10.9.5 必要なものをダウンロード&解凍

記事を読む

UWPでユニットテスト

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

記事を読む

no image

Windows 10 IoT 系の概要、エディション、入手方法などを一度整理

Windows 10 IoT にここ最近振り回されているので、ここまで解釈した内容にて、まとメモ 正

記事を読む

Hardware assisted virtualization and data execution protection must be enabled in the BIOS

MacBook Pro + Bootcamp + Windows10 で Docker for Wi

記事を読む

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

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

記事を読む

Message

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

PAGE TOP ↑