.NET Framework 4.8中ADGV筛选器保存后重启应用,筛选面板选项缺失问题的解决求助
大家好,我目前在用.NET Framework 4.8开发桌面应用,搭配NuGet的Advanced DataGridView(ADGV)组件,遇到了一个筛选器保存后重启应用的异常问题,想请各位帮忙支招。
我的需求很明确:保存用户上次使用的筛选条件,下次打开应用时自动恢复这个筛选状态,但筛选面板里的所有可选值(比如"Assigned By"列的A、B、C、D、E)必须始终保持可见,不管之前选了哪个,用户随时能重新勾选其他值。
当前实现的代码逻辑
数据加载与筛选恢复代码
bindingSourceAssignments.DataSource = ConvertToDataTable(cachedAssignments); dgvAssignments.DataSource = bindingSourceAssignments; string lastFilter = Properties.Settings.Default.LastFilter; bindingSourceAssignments.Filter = lastFilter;
筛选变更时的保存代码
private void dgvAssignments_FilterStringChanged(object sender, EventArgs e) { this.bindingSourceAssignments.Filter = this.dgvAssignments.FilterString; Properties.Settings.Default.LastFilter = this.dgvAssignments.FilterString; Properties.Settings.Default.Save(); }
具体的异常现象
一开始加载全量数据和正常筛选都没问题:比如我在"Assigned By"列的筛选面板里只勾选"A",此时B、C、D、E依然在面板里,只是变成未勾选状态。但重启应用后,诡异的情况出现了——B、C、D、E直接从筛选面板里消失了,只剩"A"可选,完全不符合我要的效果。
重启前的正常筛选面板(所有选项都可见,部分未勾选):
重启后的异常状态(仅保留之前选中的选项):
调试时我发现,如果把bindingSourceAssignments.Filter设为空字符串,所有选项会立刻重新显示;但加载保存的筛选条件时,这个筛选字符串是(Convert([AssignedByID], System.String) IN ('27')),一应用这个筛选,数据源就只剩符合条件的记录,导致ADGV的筛选面板只能从当前可见数据里生成选项,自然就看不到其他值了。
我想请教的问题
有没有办法让ADGV的筛选面板始终基于原始全量数据源来生成可选值,而不是过滤后的数据集?或者有没有其他正确的方式来保存和恢复筛选条件,同时保证筛选面板的所有选项不丢失?
备注:内容来源于stack exchange,提问作者ilterhan

