You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中实现绑定DataGrid的Wrestler冠军筛选功能

实现WinForms DataGrid筛选冠军选手功能

步骤1:保留原始完整数据集合

在窗体类中添加两个字段,分别存储所有选手数据和筛选后的结果,避免每次筛选都重新读取JSON文件:

// 窗体类的字段定义
private BindingList<Wrestler> _allWrestlers;
private BindingList<Wrestler> _filteredWrestlers;

步骤2:修改Form_Load事件代码

将读取到的JSON数据存入原始集合,初始绑定全部数据:

private void Form_Load(object sender, EventArgs e)
{
    var json = File.ReadAllText(_filePath);
    _allWrestlers = JsonConvert.DeserializeObject<BindingList<Wrestler>>(json);
    // 初始显示所有选手
    dataGridView1.DataSource = _allWrestlers;
}

步骤3:添加「筛选冠军」按钮的点击事件

  1. 在窗体上拖放一个Button控件,设置其Text为「筛选冠军」,命名为btnFilterChampions
  2. 双击按钮生成点击事件,添加筛选逻辑:
private void btnFilterChampions_Click(object sender, EventArgs e)
{
    // 使用Linq筛选Title属性不为"None"的选手
    var filteredItems = _allWrestlers.Where(wrestler => wrestler.Title != "None").ToList();
    // 将筛选结果转为BindingList并绑定到DataGrid
    _filteredWrestlers = new BindingList<Wrestler>(filteredItems);
    dataGridView1.DataSource = _filteredWrestlers;
}

步骤4:可选:添加「显示全部」按钮(恢复原始数据)

如果需要切换回显示所有选手,重复步骤3添加另一个按钮,命名为btnShowAll,点击事件代码:

private void btnShowAll_Click(object sender, EventArgs e)
{
    // 重新绑定原始完整数据集合
    dataGridView1.DataSource = _allWrestlers;
}

说明

  • 原有的CellClick事件代码无需修改,因为无论是全部数据还是筛选后的数据,DataBoundItem依然是Wrestler对象,标签更新逻辑保持有效
  • 如果JSON中Title的取值存在大小写差异(比如"none"小写),可以把判断条件改为wrestler.Title?.ToLower() != "none"(加?避免空引用异常)

内容的提问来源于stack exchange,提问作者Braden Putt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:10:24