今回は重要度が高いものだけ、締め切りが迫っているものだけを表示させます。それから重要度順や締め切り順に並べ替えます。
1 |
List<Data> datas = new List<Data>(); |
データをdatasというリストの中にいれていましたが、このなかから条件にあったものだけを取り出して表示させます。そこで表示用のデータリストと全体のデータリストのふたつをつくる必要があります。
ところでdatasは英語としては完全におかしいです。data自体が複数形だからです。にもかかわらず「推奨される名前」としてDatasとかdatasが出てきます。
まあ、それはいいとして表示させるデータを取得するメソッドとしては
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
List<Data> GetShowDatas() { List<Data> ret = datas; int importance = (int)importanceNumericUpDown.Value; int deadline = (int)deadlineNumericUpDown.Value; DateTime todayDt = DateTime.Today; DateTime deadlineDt = new DateTime(todayDt.Year, todayDt.Month, todayDt.Day + deadline, 23, 59, 59); if(checkBox1.Checked) ret = ret.Where(x => x.Importance >= importance).ToList(); if(checkBox2.Checked) ret = ret.Where(x => x.Deadline.Ticks <= deadlineDt.Ticks).ToList(); if(checkBox3.Checked) ret = ret.OrderByDescending(x => x.Importance).ToList(); if(checkBox4.Checked) ret = ret.OrderBy(x => x.Deadline.Ticks).ToList(); return ret; } |
でよいのではないかと思われます。
あとは表示させるだけ。[並べ替える]をクリックすると、GetShowDatas()で取得したデータのみを表示します。
前回のUpdateListViewItems()を少し変えています。datasからデータを取得するのではなく、GetShowDatas()で取得したデータを使うようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public partial class Form1 : Form { void UpdateListViewItems() { var indexes = listView1.SelectedIndices; listView1.Items.Clear(); var showData = GetShowDatas(); // ←ここ foreach(Data data in showData) { AddListViewItemFromData(data); } if(indexes.Count != 0) listView1.Items[indexes[0]].Selected = true; } Data GetDataFromListViewItem() { if(listView1.SelectedIndices.Count == 0) return null; int selIndex = listView1.SelectedIndices[0]; var showData = GetShowDatas(); return showData[selIndex]; } } |
[削除]がクリックされたときは選択されたアイテムを削除するとともに、datasのなかから対応するものを見つけ出してRemoveしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public partial class Form1 : Form { private void buttonDelete_Click(object sender, EventArgs e) { if(listView1.SelectedIndices.Count == 0) return; int selIndex = listView1.SelectedIndices[0]; listView1.Items.RemoveAt(selIndex); var showData = GetShowDatas(); Data data = showData[selIndex]; datas.Remove(data); } } |
それ以外の部分は前回と同じです。