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

WPF DataGrid文本框搜索功能报错CS1061求助

问题排查与解决

一、CS1061错误的直接原因

你的XAML中为TextBox绑定了KeyUp="FilterTextBox_CercaChanged"事件,但后台C#代码中未定义该事件处理方法,编译器找不到对应方法,因此触发CS1061错误。

解决方式二选一:

  • 方案1:删除XAML中多余的KeyUp绑定
    修改TextBox的XAML代码,移除KeyUp="FilterTextBox_CercaChanged"属性:

    <TextBox x:Name="TextBox_Cerca" 
        HorizontalAlignment="Left" 
        Margin="84,49,0,0" 
        TextWrapping="Wrap" 
        VerticalAlignment="Top" 
        Width="128" 
        RenderTransformOrigin="-0.775,-0.722" 
        Height="22" 
        TextChanged="TexttBox_Cerca_TextChanged" />
    
  • 方案2:添加对应的KeyUp事件处理方法
    在后台C#代码中补充该方法(复用现有过滤逻辑):

    private void FilterTextBox_CercaChanged(object sender, KeyEventArgs e)
    {
        var filterTextBox = (TextBox)sender;
        SetRowVisibilityByFilterText(filterTextBox.Text);
    }
    

二、实现DataMatchesFilterText搜索逻辑

当前该方法未实现,补充以下代码可实现全局属性匹配(忽略大小写):

private bool DataMatchesFilterText(OttoColonne? ottoColonne, string filterText)
{
    if (ottoColonne == null || string.IsNullOrWhiteSpace(filterText))
        return true; // 无数据或无搜索词时显示所有行

    string lowerFilter = filterText.ToLower();
    // 遍历所有属性,检查是否包含关键词
    return ottoColonne.ID.ToString().Contains(lowerFilter)
        || (ottoColonne.Squadra_casa?.ToLower().Contains(lowerFilter) ?? false)
        || (ottoColonne.Squadra_fuoric?.ToLower().Contains(lowerFilter) ?? false)
        || (ottoColonne.Ris_cas?.ToLower().Contains(lowerFilter) ?? false)
        || (ottoColonne.Ris_fuorc?.ToLower().Contains(lowerFilter) ?? false)
        || (ottoColonne.segni?.ToLower().Contains(lowerFilter) ?? false)
        || (ottoColonne.Data?.ToLower().Contains(lowerFilter) ?? false)
        || (ottoColonne.Giornate?.ToLower().Contains(lowerFilter) ?? false);
}

三、优化GetVisibleRows方法(解决虚拟化导致的null问题)

若DataGrid启用虚拟化,ItemContainerGenerator.ContainerFromIndex可能返回null,修改方法确保获取所有行容器:

public static IEnumerable<DataGridRow> GetVisibleRows(DataGrid grid)
{
    if (grid == null || grid.Items == null) yield break;

    foreach (var item in grid.Items)
    {
        var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
        // 容器未生成时强制更新布局
        if (row == null)
        {
            grid.UpdateLayout();
            row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
        }
        if (row != null)
            yield return row;
    }
}

四、额外注意事项

  • 确认DataGrid的x:Name确实为DataGrid1,否则会触发“当前上下文不存在DataGrid1”的CS1061错误。
  • 检查CSV数据加载逻辑,确保数据已正确绑定到OttoColonne对象,否则x.Item as OttoColonne会返回null,导致所有行被隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:25:30