应用程序在文本框文本更改事件上崩溃

本文关键字:文本 事件 崩溃 应用程序 | 更新日期: 2023-09-27 18:35:49

伙计们,我遇到了一些问题,我正在使用实体框架,并且在文本更改事件中,我必须过滤记录并且必须使用autocompleteSource进行分配,但我不知道为什么应用程序崩溃,我已经搜索但仍然没有找到富有成效的结果。请帮忙。这是代码:

AutoCompleteStringCollection ChartCollection = new AutoCompleteStringCollection();                    
txtChartNo.AutoCompleteCustomSource.Clear();
if (txtChartNo.Text.Trim() != string.Empty &&
    Convert.ToString(txtChartNo.Text.Trim()).Length > 0)
{
    List<Patient> pat =
        PatientManager
        .GetByChartNoForAutoComplete(Convert.ToString(txtChartNo.Text))
        .ToList();// fetching data from db using EF
    if (pat.Count > 0)
    {
        pat.ForEach(f =>
        {
            ChartCollection.Add(f.ChartNo + " - " + f.FullName);
        });
        txtChartNo.AutoCompleteCustomSource = ChartCollection;
    }
}

应用程序在文本框文本更改事件上崩溃

由于没有异常消息,我可以指出在此代码中可能遇到的两个潜在问题。

首先,pat收藏可能是null。如果是这种情况,对此进行任何操作都会导致NullReferenceException。防范null将足以解决问题。

if (pat != null && pat.Count > 0)
{
    // any operation on pat collection.
}

第二种可能性是,在访问集合之前,可能会释放数据上下文。我猜你在GetByChartNoForAutoComplete方法中调用using块中的数据上下文。如果在块内您不调用ToList()那么实际上您不会获取数据。在代码段中调用数据时,代码会尝试检索数据ToList但此时数据上下文已释放。

这两个建议都有点长镜头,但由于您提供的信息非常有限,因此很难给出更准确的信息。

作为旁注,有很多地方可以改进您的代码。 TextBox.Text不需要转换为字符串。此外,要检查字符串是否为空,请使用 string.IsNullOrEmpty