前回までの概要
前前回まででタスク管理アプリの大枠作成、ブラッシュアップをしました。
今回はWBS画面の内容見直し、ブラッシュアップを行います。
プロンプト
WBS画面に担当者のフィルタ機能を実装したい
回答
実装方針
WBS画面へ:
担当者フィルタ
を追加します。
実現内容
| 機能 | 内容 |
|---|---|
| 担当者選択 | ComboBox |
| 全件表示 | 「すべて」 |
| 自動絞込 | SelectionChange |
| WBS再描画 | Filter反映 |
| 子タスク対応 | 親表示維持可能 |
修正対象
| ファイル | 内容 |
|---|---|
| WbsForm.Designer.cs | ComboBox追加 |
| WbsForm.cs | Filter実装 |
| MasterService.cs | 既存利用 |
1. WbsForm.Designer.cs 修正
フィールド追加
private Label lblAssigneeFilter;
private ComboBox cmbAssigneeFilter;
InitializeComponent() 追加
ラベル
lblAssigneeFilter =
new Label();
lblAssigneeFilter.Text =
"担当者";
lblAssigneeFilter.Location =
new Point(20, 15);
lblAssigneeFilter.AutoSize = true;
ComboBox
cmbAssigneeFilter =
new ComboBox();
cmbAssigneeFilter.Location =
new Point(80, 10);
cmbAssigneeFilter.Width = 180;
cmbAssigneeFilter.DropDownStyle =
ComboBoxStyle.DropDownList;
Controls追加
Controls.Add(lblAssigneeFilter);
Controls.Add(cmbAssigneeFilter);
DataGrid位置調整
フィルタ分下げる。
修正前
dgvWbs.Location =
new Point(0, 0);
修正後
dgvWbs.Location =
new Point(0, 40);
高さ調整
dgvWbs.Height =
ClientSize.Height - 40;
2. WbsForm.cs 修正
using追加
using TaskManager.Services;
フィールド追加
private readonly
MasterService _masterService =
new();
private string _selectedAssignee =
"すべて";
コンストラクタ修正
追加
LoadAssigneeFilter();
cmbAssigneeFilter.SelectedIndexChanged +=
cmbAssigneeFilter_SelectedIndexChanged;
3. 担当者フィルタロード追加
メソッド追加
private void LoadAssigneeFilter()
{
cmbAssigneeFilter.Items.Clear();
cmbAssigneeFilter.Items.Add("すべて");
var master =
_masterService.Load();
foreach (var assignee
in master.Assignees)
{
cmbAssigneeFilter.Items.Add(
assignee);
}
cmbAssigneeFilter.SelectedIndex = 0;
}
4. フィルタ変更イベント追加
メソッド追加
private void cmbAssigneeFilter_SelectedIndexChanged(
object? sender,
EventArgs e)
{
_selectedAssignee =
cmbAssigneeFilter.SelectedItem?
.ToString()
?? "すべて";
LoadWbs();
}
5. LoadWbs() 修正
超重要。
修正前
var rows =
_wbsService.CreateRows(tasks);
修正後
var rows =
_wbsService.CreateRows(tasks);
if (_selectedAssignee
!= "すべて")
{
rows = rows
.Where(x =>
x.Assignee ==
_selectedAssignee)
.ToList();
}
実装、起動確認
まとめ
WBSの実用化も一旦完了かと思います。
次回はWBSカラム設定画面を修正していきます。
