【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

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

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

記事を読む

初心者でも手順どおりに従うだけでロゴ画像が作れる

Webサイトを作ったので、ここを参考に ロゴ制作の練習をしました。  

記事を読む

no image

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

Raspberry Pi 3 Model の Ubuntu や Raspbian で OmxPlay

記事を読む

no image

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

前回の続きというか、WPF版。 <Window x:Class="MyWP

記事を読む

SIPSorceryにて、「型 ‘log4net.ILog’ が参照されていないアセンブリで定義されています。」

ある時、SIPクライアントの開発を行っていた。 SIPクライアントライブラリの選定にあたって S

記事を読む

no image

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

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

記事を読む

no image

Microsoft Flow 入門

社内LT用

記事を読む

[UWP]Releaseビルド時に、OData.ClientでSystem.Reflection.MissingMetadataExceptionが発生する

UWPでDebugビルドでは問題ないけど、Releaseビルドにすると、Microsoft.ODat

記事を読む

【iPhoneアプリ】リリース手順〜審査完了後〜

前回からの続き。 中身が無いアプリだったのでリジェクトされると思いきや 審査に通ってしま

記事を読む

no image

【WPF/XAML】Buttonのテキスト(Content)を自動改行/折り返しさせる

今更WPFを触りはじめました。 それまではほぼ.NETは2.0止まりというオワコン開発者です。

記事を読む

Message

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

PAGE TOP ↑