|
■No88978 (わたー さん) に返信 > その後、このlistviewに入ったデータを「UserData」みたいな名前の一つのデータとして扱うことはできますか? > UserDataを代入すればデータがまるまる復旧するようなことができるか です。
丸ごと渡したいなら、 No88982 の案でどうでしょう。
※ C# 7.x + .NET Framework 4.7.x で動作確認
// 予約情報 public class UserData : ListViewItem { public DateTime Schedule { get; } public DateTime Date { get => Schedule.Date; } public string TimeText { get => Schedule.ToString(@"HH\時mm\分"); } public string UserName { get; set; } public string Gender { get; set; }
public UserData(DateTime schedule, string userName, string gender) { (Schedule, UserName, Gender) = (schedule, userName, gender); Text = TimeText; SubItems.Add(userName).Name = "名前"; SubItems.Add(gender).Name = "性別"; } }
// 予約の一覧 private List<UserData> list = new List<UserData>();
// ListView を更新 private DateTime selectedDay; private void RefreshView(DateTime newDay) { selectedDay = newDay; listView1.BeginUpdate(); listView1.Items.Clear();
// UserData は ListViewItem を継承しているので、 // List<UserData> を LINQ で配列に抽出すれば、そのまま AddRange に渡せる listView1.Items.AddRange(list.Where(v => v.Date == selectedDay).ToArray());
listView1.EndUpdate(); }
private void Form1_Load(object sender, EventArgs e) { listView1.View = View.Details; listView1.FullRowSelect = true; listView1.MultiSelect = false; listView1.Columns.Clear(); listView1.Columns.Add("時刻"); listView1.Columns.Add("名前"); listView1.Columns.Add("性別");
list.Add(new UserData(new DateTime(2018, 10, 23, 14, 0, 0), "田中太郎", "男")); list.Add(new UserData(new DateTime(2018, 10, 23, 15, 0, 0), "わたー", "n/a")); list.Add(new UserData(new DateTime(2018, 10, 30, 15, 0, 0), "鈴木一郎", "男")); list.Add(new UserData(new DateTime(2018, 10, 30, 16, 0, 0), "田中太郎", "男"));
RefreshView(new DateTime(2018, 10, 23)); }
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { var items = listView1.SelectedItems; if (items.Count == 0) { label1.Text = ""; label2.Text = ""; } else { // 選択行の情報は、ListViewItem からそのまま取り出しても良いし var listItem = items[0]; label1.Text = listItem.Text + ";" + listItem.SubItems["名前"].Text + ";" + listItem.SubItems["性別"].Text;
// UserData にキャストしてから扱うこともできる var userData = (UserData)listItem; label2.Text = userData.TimeText + ";" + userData.UserName + ";" + userData.Gender; } }
|