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

时间:2014-12-31 12:26:11

标签: c# winforms

Mates,我遇到了一些问题,我正在使用Entity Framework,并且在textchange事件中我必须过滤记录并且必须使用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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

首先,pat集合可能是null。如果是这样的话,任何操作都将导致NullReferenceException。防范null将是充分的补救措施。

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

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

这两项建议都有点远,但由于信息非常有限,你提供的建议很难提供更精确的建议。

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

相关问题