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

基于WPF实现DataGrid数据填充及复选框过滤功能的技术求助

嘿,刚看了你写的WPF UI框架,已经有了复选框和DataGrid的雏形啦!接下来咱们一步步把从SQL读数据、绑定到DataGrid,还有复选框过滤的功能补上,超级简单的~

第一步:定义数据模型

首先咱们得先创建一个类来对应SQL表的字段,这样方便后续数据绑定。假设你的SQL表有Id、Environment(对应复选框的DEV/QA这些)、ProjectName、Status这些字段,你可以根据实际情况修改:

using System;

namespace WpfApp2
{
    public class EnvironmentData
    {
        public int Id { get; set; }
        public string Environment { get; set; }
        public string ProjectName { get; set; }
        public string Status { get; set; }
    }
}
第二步:从SQL读取数据

接下来写一个方法来从SQL数据库里拉取数据,记得替换成你自己的数据库连接字符串和表名哦:

using System.Collections.Generic;
using System.Data.SqlClient; // 如果是.NET Core/.NET 5+,用Microsoft.Data.SqlClient

namespace WpfApp2
{
    public partial class MainWindow
    {
        private List<EnvironmentData> GetDataFromSql()
        {
            var dataList = new List<EnvironmentData>();
            // 替换成你的数据库连接字符串
            var connectionString = "Data Source=你的服务器名;Initial Catalog=你的数据库名;Integrated Security=True";
            
            using (var conn = new SqlConnection(connectionString))
            {
                // 替换成你的表名和实际字段
                var query = "SELECT Id, Environment, ProjectName, Status FROM 你的表名";
                var cmd = new SqlCommand(query, conn);
                conn.Open();
                
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        dataList.Add(new EnvironmentData
                        {
                            Id = (int)reader["Id"],
                            Environment = reader["Environment"].ToString(),
                            ProjectName = reader["ProjectName"].ToString(),
                            Status = reader["Status"].ToString()
                        });
                    }
                }
            }
            return dataList;
        }
    }
}
第三步:绑定数据到DataGrid

先给你的DataGrid起个名字,方便后台代码引用,然后在窗口初始化的时候加载数据,同时保存一份原始数据(这样过滤的时候不会丢失源数据):

修改后的XAML里的DataGrid部分

<DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Height="181" Margin="82,202,0,0" VerticalAlignment="Top" Width="679"/>

后台窗口构造函数里加载数据

using System.Collections.Generic;
using System.Windows;

namespace WpfApp2
{
    public partial class MainWindow : Window
    {
        private List<EnvironmentData> _originalData; // 保存原始数据,用于过滤
        
        public MainWindow()
        {
            InitializeComponent();
            // 加载SQL数据并绑定到DataGrid
            _originalData = GetDataFromSql();
            dataGrid.ItemsSource = _originalData;
        }
    }
}
第四步:实现复选框过滤功能

先给每个复选框起个名字,然后添加事件处理逻辑。这里我给你做两种方案:一种是点击Apply按钮过滤,另一种是复选框状态变化时自动过滤,你可以选自己喜欢的~

修改后的XAML复选框和按钮部分

<CheckBox x:Name="chkDev" Content="DEV" HorizontalAlignment="Left" Margin="82,27,0,0" VerticalAlignment="Top" 
          Checked="EnvironmentCheckBox_Changed" Unchecked="EnvironmentCheckBox_Changed"/>
<CheckBox x:Name="chkQa" Content="QA" HorizontalAlignment="Left" Margin="82,58,0,0" VerticalAlignment="Top"
          Checked="EnvironmentCheckBox_Changed" Unchecked="EnvironmentCheckBox_Changed"/>
<CheckBox x:Name="chkLab" Content="LAB" HorizontalAlignment="Left" Margin="82,94,0,0" VerticalAlignment="Top"
          Checked="EnvironmentCheckBox_Changed" Unchecked="EnvironmentCheckBox_Changed"/>
<CheckBox x:Name="chkUat" Content="UAT" HorizontalAlignment="Left" Margin="173,27,0,0" VerticalAlignment="Top"
          Checked="EnvironmentCheckBox_Changed" Unchecked="EnvironmentCheckBox_Changed"/>
<CheckBox x:Name="chkPreProd" Content="Pre-Prod" HorizontalAlignment="Left" Margin="173,62,0,0" VerticalAlignment="Top"
          Checked="EnvironmentCheckBox_Changed" Unchecked="EnvironmentCheckBox_Changed"/>
<Button Content="Apply" HorizontalAlignment="Left" Margin="82,140,0,0" VerticalAlignment="Top" Width="75"
        Click="ApplyButton_Click"/>

过滤逻辑代码

把下面的代码加到MainWindow类里:

private void FilterData()
{
    var selectedEnvs = new List<string>();
    
    // 收集所有选中的环境
    if (chkDev.IsChecked == true) selectedEnvs.Add("DEV");
    if (chkQa.IsChecked == true) selectedEnvs.Add("QA");
    if (chkLab.IsChecked == true) selectedEnvs.Add("LAB");
    if (chkUat.IsChecked == true) selectedEnvs.Add("UAT");
    if (chkPreProd.IsChecked == true) selectedEnvs.Add("Pre-Prod");
    
    // 根据选中的环境过滤数据
    if (selectedEnvs.Count == 0)
    {
        // 没选中任何复选框,显示全部数据
        dataGrid.ItemsSource = _originalData;
    }
    else
    {
        var filteredData = _originalData.Where(d => selectedEnvs.Contains(d.Environment)).ToList();
        dataGrid.ItemsSource = filteredData;
    }
}

// 点击Apply按钮触发过滤
private void ApplyButton_Click(object sender, RoutedEventArgs e)
{
    FilterData();
}

// 复选框状态变化时自动触发过滤
private void EnvironmentCheckBox_Changed(object sender, RoutedEventArgs e)
{
    FilterData();
}
最后要注意的小细节
  • 如果你用的是.NET Core/.NET 5+,记得在NuGet包里安装Microsoft.Data.SqlClient;如果是.NET Framework,直接引用System.Data.SqlClient就行。
  • 一定要把连接字符串、SQL查询里的表名和字段替换成你自己的实际内容哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:45:30