отмена выбора значения списка - PullRequest
1 голос
/ 27 октября 2011

Я выбираю элементы из одного ListBox и добавляю их ко второму ListBox по нажатию кнопки. Проблема в том, что, когда я хочу отменить выбор выбранных элементов из listbox2, выдается ошибка «Ссылка на объект не установлена ​​на экземпляр объекта». Ниже приведен код, который я добавил за кнопкой SELECT. Я использовал тот же код для отмены выбора со списком 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);
}

Ответы [ 2 ]

6 голосов
/ 27 октября 2011

В лучшем случае, это предположение, потому что утверждение о том, что оно терпит неудачу в первой строке, не имеет смысла.

Мои психические силы говорят мне, что это на самом деле терпит неудачу при

string id = view["Course_Id"].ToString();

потому что представление является нулевым.Проблема в том, что

DataRowView view = listBox1.Items[index] as DataRowView;

пытается привести элементы из ListBox в DataRowView.Это всегда будет возвращать ноль, если по какой-то (нечетной) причине вы не заполнили свой ListBox.Items коллекцией DataRowView.

EDIT

Возможно, заполнение listBox1DataRowView, но вы заполняете listBox2 с помощью System.String:

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);
0 голосов
/ 27 октября 2011

Предполагая, что это скопировано именно из вашего кода. Эта строка неверна:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...