C # Split () в ListBox - PullRequest
       16

C # Split () в ListBox

3 голосов
/ 03 марта 2011

listBox2 содержимое:

0: Первый продукт
1: ProductAgain
2: Другой продукт
3: OkFinalProduct

То, что я пытаюсь сделать, когда выбранный индекс изменился в listBox2, это заставить его int "DBID" значение числа перед ":".

Вот моя попытка:

    private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listBox2.SelectedIndex == -1)
    {
        return;
    }
    int DBID;
    DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(":"[0]));
    ShowProduct(DBID);
}

Любая помощь с этим очень ценится:)

Спасибо, ребята

РЕДАКТИРОВАТЬ - Извините, да, я действительно пытался:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]); 

но я получаю следующие ошибки:

  • Наилучший перегруженный метод соответствует для string.Split (params char []) 'имеет недопустимые аргументы
  • Аргумент1: невозможно преобразовать из 'string' в 'char []



РЕДАКТИРОВАТЬ # 2 -
При использовании:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);

После запуска приложения и нажатия на другой элемент списка, я сталкиваюсь с этим исключением:

Исключение NullReferenceException не обработано. В экземпляре объекта не задана ссылка на объект.

Я ценю всю помощь, ребята!

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Попробуйте изменить:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(":"[0]));

Кому:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);

Обновление

Попробуйте вместо этого.Он явно добавляет новый символ:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(new char[] { ':' })[0]);
3 голосов
/ 03 марта 2011
DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);
1 голос
/ 03 марта 2011

Более безопасный способ - заменить один оператор следующим кодом:

if (listBox3.SelectedValue != null)
{
    string selectedValue = listBox3.SelectedValue.ToString();

    if (!string.IsNullOrEmpty(selectedValue))
    {
        if (Int32.TryParse(selectedValue.Split(':')[0], NumberStyles.Integer, CultureInfo.CurrentCulture, out DBID))
        {
            // Process DBID
        }
        else
        {
            // Cannot convert to Int32
        }
    }
}

Затем используйте breakpoints в коде, чтобы найти, где происходит NullReferenceException.

Обратите внимание , что в этом примере предполагается, что вы используете System.Windows.Controls.ListBox или System.Windows.Forms.ListBox, а не System.Web.UI.WebControls.ListBox. В последнем случае SelectedValue является string, а не object (как отметил @Srinivas Reddy Thatiparthy в комментарии другого ответа)

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