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
相关产品推荐
相关产品推荐

