#c# #listbox
#c# #listbox
Вопрос:
Я выбираю элементы из одного ListBox
и добавляю их ко второму ListBox
при нажатии кнопки. Проблема в том, что когда я хочу отменить выбор выбранных элементов из listbox2, он выдает ошибку «Ссылка на объект не установлена для экземпляра объекта». Ниже приведен код, который я добавил за кнопкой ВЫБОРА. Я использовал тот же код для отмены выбора, заменив listbox1 на listbox2 и наоборот.
ПРИМЕЧАНИЕ: элементы в listbbox1 извлекаются из базы данных, а элементы, выбранные в listbox2, будут сохранены в базе данных
List<int> rowIndexes = new List<int>();
foreach (int index in listBox1.SelectedIndices)
{
DataRowView view = listBox1.Items[index] as DataRowView;
string id = view["Course_Id"].ToString();
string name = view["Course_Name"].ToString();
listBox2.Items.Add(name);
rowIndexes.Add(index);
}
try
{
for (int i = rowIndexes.Count; i > 0; i--)
{
dt.Rows.RemoveAt(rowIndexes[i - 1]);
dt.AcceptChanges();
}
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
Комментарии:
1. C #? в какой строке вы получаете ошибку? Это точно скопировано?
2. Список<int> Индексы строк = новый список<int>(); содержит null .
3. Ошибка в строке
List<int> rowIndexes = new List<int>();
? Это не имеет никакого смысла — все, что вы делаете, это создаете новое (пустое)List<T>
.4. прошу прощения… ошибка находится в DataRowView view = listBox1 . Элементы [индекс] как DataRowView; после вставки последовательных точек останова во всех этих элементах я обнаружил, что даже после выполнения приведенной выше строки переменная view все еще содержит null. и в следующей строке я присваиваю значение view идентификатору .. Как это может быть разрешено?
Ответ №1:
В лучшем случае это предположение, потому что утверждение о том, что оно завершается ошибкой в первой строке, не имеет смысла.
Мои экстрасенсорные способности говорят мне, что это на самом деле не удается
string id = view["Course_Id"].ToString();
поскольку view имеет значение null. Проблема в том, что
DataRowView view = listBox1.Items[index] as DataRowView;
пытается преобразовать элементы из ListBox в DataRowView. Это всегда будет возвращать значение null, если только по какой-либо (нечетной) причине вы не заполнили свой ListBox.Элементы с коллекцией DataRowView.
Редактировать
Возможно, вы заполняете listBox1 с помощью DataRowView, но вы заполняете listBox2 с помощью System .Строка:
string name = view["Course_Name"].ToString();
listBox2.Items.Add(name);
Попробуйте изменить это на
//string id = view["Course_Id"].ToString();
//string name = view["Course_Name"].ToString();
listBox2.Items.Add(view);
Комментарии:
1. да, вы правы, проблема в представлении. но он отлично работает при перемещении элементов из listbox1 в listbox2, тогда y выдает ошибку при перемещении элементов из listbox2 в listbox1?
2. я попытался закомментировать эти две строки и написать listBox2.Items. Добавить (просмотр); но это выдает ошибку, что коллекции элементов не могут быть изменены, когда установлено свойство datasource???? любая помощь, пожалуйста???
3. Я полагаю, что ошибка связана с копированием обратно в исходное ListBox, которое было загружено с помощью привязки данных. Похоже, вам нужно будет изменить представление данных за ListBox.DataSource, а не напрямую изменять ListBox. Элементы для этого направления.
Ответ №2:
Предполагая, что это скопировано точно из вашего кода. Эта строка неверна:
List<int> row Indexes = new List<int>();
его должно быть:
List<int> rowIndexes = new List<int>();
Кроме того, что такое dt
?
Редактировать
Если это действительно сбой при:
List<int> rowIndexes = new List<int>();
Возможно, вы не:
using System.Collections.Generic;
Или иметь ссылку на System
в ссылках на ваш проект.
Комментарии:
1. Основываясь на вызываемых методах
dt
и имени переменной, это, вероятно, aDataTable
🙂 Независимо от того, находится ли оно в области видимости на данный момент, не очевидно, исходя из опубликованного кода OP.2. dt — это таблица данных, используемая для извлечения значений из базы данных.
3. в моем коде есть rowIndexes, я не понимаю, как здесь отображаются индексы строк.
4. У вас есть ссылка на проект System и вы «используете System. Коллекции. Общий» в вашем файле кода?
5. да, я использую общее пространство имен… есть идеи, в чем может быть проблема?