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

如何在绑定的DataGridView中按日期子串筛选2013年数据?

嘿,我来帮你搞定这个DataGridView的日期筛选问题!针对你说的BeginDate列(格式为yyyy/mm/dd),要筛选出2013年的所有行,这里有几种实用的方法,你可以根据自己的数据源类型来选:

方法一:数据源是DataTable(最常用场景)

如果你的DataGridView绑定的是DataTable,用DataView来过滤是最便捷的,不需要重新获取数据,直接对现有数据源做筛选即可:

// 假设你的DataTable实例名为dataTable
DataView dataView = new DataView(dataTable);
// 如果BeginDate是字符串类型,取前4位年份匹配
dataView.RowFilter = "SUBSTRING(BeginDate, 1, 4) = '2013'";
// 绑定过滤后的视图到DataGridView
dataGridView1.DataSource = dataView;

小提示:如果你的BeginDate字段实际存储的是DateTime类型(而不是字符串),那用下面的写法更严谨,能避免字符串格式异常的问题:

dataView.RowFilter = "Year(BeginDate) = 2013";
方法二:用LINQ筛选集合数据源

如果你的数据源是List<自定义模型>这类集合,用LINQ查询后重新绑定就很方便:

// 假设你的数据源是List<YourDataModel> dataList
// 模型里的BeginDate是DateTime类型的情况
var filteredData = dataList.Where(item => item.BeginDate.Year == 2013).ToList();
dataGridView1.DataSource = filteredData;

如果模型里的BeginDate是字符串类型,记得先转成DateTime再判断,最好加上异常处理避免格式错误:

var filteredData = dataList.Where(item => 
{
    if (DateTime.TryParse(item.BeginDate, out DateTime date))
    {
        return date.Year == 2013;
    }
    // 格式不正确的行直接排除
    return false;
}).ToList();
dataGridView1.DataSource = filteredData;
方法三:直接遍历DataGridView行(应急用,不推荐大数据量)

如果上面的方法都不适用,也可以直接遍历行并设置可见性,但这种方法效率较低,数据多的时候会卡:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    // 跳过新增行
    if (!row.IsNewRow)
    {
        string dateValue = row.Cells["BeginDate"].Value?.ToString();
        if (!string.IsNullOrEmpty(dateValue))
        {
            // 两种判断方式选一种
            // 方式1:字符串前缀匹配
            bool is2013Row = dateValue.StartsWith("2013");
            // 方式2:转成DateTime判断
            // bool is2013Row = DateTime.Parse(dateValue).Year == 2013;
            row.Visible = is2013Row;
        }
        else
        {
            row.Visible = false;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

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