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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:31:00