Ошибка в окне автозаполнения

#c# #xml #autocomplete #windows-phone #autocompletebox

#c# #xml #автозаполнение #windows-phone #автозаполнение

Вопрос:

У меня есть XML-файл, и я хочу выполнить поиск в нем с помощью поля автозаполнения. Я использую приведенный ниже код, но он разбился. Как я могу это исправить или есть способ лучше?

                XDocument loadedData = XDocument.Load("BankCode.xml");

        var data = from query in loadedData.Descendants("BankCode")
                   select new BankData
                   {
                       BankName= (string)query.Element("Bank"),
                   };
        this.acBox.ItemsSource = data;

        XDocument loadedCustomData = XDocument.Load("BankCode.xml");
        var filteredData = from c in loadedCustomData.Descendants("Bank")
                           where c.Attribute("Code").Value == acBox.Text
                           select new BankData()
                           {
                               Code= c.Attribute("Code").Value
                           };
        listBox1.ItemsSource = filteredData;
 

Я хочу создать приложение, в котором, когда пользователь вводит название банка в поле автозаполнения после нажатия кнопки поиска, ему отображается код банка. (!!acBox — это поле автозаполнения.)

Комментарии:

1. Пожалуйста, объясните «сбой». Есть ли исключение? Кроме того, вам нужно будет показать некоторую разметку из ‘BankCode.xml «…

2. Когда я использую банк из поля автозаполнения и нажимаю кнопку поиска, он разбился, и отладчик показывает этот код как ошибку: ‘где c.Атрибут («Код»). Значение == acBox. Текст’ и говорит, что исключение типа ‘System.NullReferenceException’ произошло в DatabindingAutoCompleteBox.DLL но не был обработан в пользовательском коде Дополнительная информация: ссылка на объект не установлена для экземпляра объекта.

3. попробуйте добавить нулевую проверку ? where c.Attribute("Code") != null amp;amp; c.Attribute("Code").Value == acBox.Text . NRE, похоже, означает, что c.Attribute("Code") это значение равно нулю…

Ответ №1:

Кажется, у 1 из ваших Bank узлов нет Code атрибута. Вы должны добавить нулевую проверку:

 var filteredData = from c in loadedCustomData.Descendants("Bank")
                   where c.Attribute("Code") != null amp;amp; c.Attribute("Code").Value == acBox.Text
                   select new BankData()
                   {
                       Code= c.Attribute("Code").Value
                   };