2014-12-31 4 views
-1

Соседи, я застрял в некоторой проблеме, я использую Entity Framework, а на событии обмена текстовыми сообщениями мне приходится фильтровать записи и назначать с помощью autocompleteSource, но я не знаю, почему приложение получить разбился, я искал, но все еще не нашел плодотворного результата. Пожалуйста помоги. Вот код:Приложение get crash on textbox Событие TextChanged

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

Просьба предоставить полное сообщение об ошибке – user2900970

+0

Я не могу получить какое-либо исключение, я пробовал много. –

+0

Существует несколько мест, где вы можете получить «NullReferenceException», но без сообщения об исключении это просто дикая догадка. – PiotrWolkowski

ответ

0

Поскольку сообщение об ошибке отсутствует, я могу указать на две потенциальные проблемы, с которыми вы могли столкнуться в этом коде.

Во-первых, коллекция pat может быть null. Если это так, любая операция по этому вызову приведет к NullReferenceException. Охрана от null будет достаточным средством правовой защиты.

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

Вторая возможность заключается в том, что у вас может быть свой контекст данных перед доступом к коллекции. Я предполагаю, что внутри метода GetByChartNoForAutoComplete вы вызываете контекст данных внутри блока using. Если в блоке INSIDE вы НЕ ВЫПОЛНИТЕ ToList(), тогда вы фактически не извлекаете данные. Ваш код пытается получить данные, когда в вашем фрагменте вызывается ToList, но в то время уже существует контекст данных.

Оба предложения немного длинны, но с очень ограниченной информацией, которую вы предоставили, трудно дать что-либо более точное.

В качестве побочного примечания есть немало мест, где ваш код может быть улучшен. TextBox.Text не нужно преобразовывать в строку. Кроме того, чтобы проверить, является ли строка пустой, используйте string.IsNullOrEmpty.

Смежные вопросы