WPF中TextBox联动DataGrid搜索:ButtockNo为数值类型时的处理
WPF数值字段的DataGrid模糊搜索修改方案
没问题,我来帮你调整代码,搞定数值字段的模糊搜索需求!
核心思路
原代码是针对字符串类型的ButtockNo用StartsWith做前缀搜索,但当字段变成数值类型(比如int/long/decimal)时,直接调用字符串方法会报错。最稳妥的解决方式是把数值字段转换为字符串,再和输入文本做匹配——这种方式和原字符串搜索的逻辑完全一致,不需要改变用户的搜索习惯。
修改后的完整代码
XAML部分(无需修改)
原XAML的TextBox和DataGrid布局完全可以复用,不需要调整:
<Window x:Class="DamDarYar_IDMS.Window4" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:DamDarYar_IDMS" mc:Ignorable="d" Title="Window4" Height="300" Width="300"> <Grid> <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="151,44,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" TextChanged="textBox_TextChanged"/> <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="60,82,0,0" VerticalAlignment="Top" Height="112" Width="211"/> </Grid> </Window>
C#逻辑层代码(关键修改)
我优化了原代码的资源管理和异常处理,同时适配数值字段的搜索:
private void textBox_TextChanged(object sender, TextChangedEventArgs e) { // 使用using自动释放数据库上下文,避免资源泄漏 using (IDMS_dbEntities db = new IDMS_dbEntities()) { try { string searchText = textBox.Text.Trim(); // 处理空输入:显示所有数据 if (string.IsNullOrEmpty(searchText)) { dataGrid.ItemsSource = db.tblAIs.ToList(); return; } // 将数值字段转为字符串,执行前缀模糊搜索 dataGrid.ItemsSource = db.tblAIs .Where(a => a.ButtockNo.ToString().StartsWith(searchText)) .ToList(); } catch (Exception ex) { // 可以根据实际需求替换为日志记录或更友好的提示 MessageBox.Show($"搜索出错:{ex.Message}"); } } }
额外注意事项
- 如果
ButtockNo是可空数值类型(比如int?),需要先判断是否为null,避免空引用错误:.Where(a => a.ButtockNo.HasValue && a.ButtockNo.Value.ToString().StartsWith(searchText)) - 若需要更宽泛的模糊搜索(比如包含输入文本而非仅前缀),可以把
StartsWith替换为Contains; - 原代码的空
catch块容易隐藏问题,建议保留异常提示或日志记录,方便排查问题。
内容的提问来源于stack exchange,提问作者mimo
相关产品推荐
相关产品推荐

