Как получить данные из выбранного элемента в ListView?

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Как получить данные из выбранного элемента в ListView?

Сообщение Thomas » 24.04.2006 (Пн) 22:25

Приветствую всех.
При написании учебной программы, описанной в вопросе" Чтение данных из эдемента ArrayList" возник следующий вопрос.

А как корректно перенести данные содержащиеся в выбранном (выделенном)элементе ListView в TextBox?

Как заполнять, отображать и удалять элементы в ListView в принципе понятно. А вот как перенести "строку" с данными на клиента из ListView в TexBox или label?

Промотрел все от сюда http://search.microsoft.com/results.asp ... &FORM=PEME

но искомого так и не нашел. :(

Вот отсюда
http://msdn.microsoft.com/library/rus/d ... stopic.asp
выбрал это
lblKlantData.Text=lstvKl.SelectedItems.ToString();
студия не ругается при компиляции, но при работе в Label отображается следующее
"System.Windows.Forms.ListView+SelectedListViewItemCollection"

Сделать кастинг как при получении данных из ArrayList не получается

Persoon data= (Persoon)(lstvKl.SelectedItems);

тут студия ругаться начинает нехорошими словами. Хотя по идее ListView ведь тоже хранит обьекты. И почему не получается распаковать этот обьект я не понимаю. :oops:
Попробовал еще так извернуться
int index;
index=lstvKl.SelectedIndices;
lblKlantData.Text=lstvKl.Items[index].SubItems.ToString();
Опять студия ругается на свойство SelectedIndices.

И возникает извечный вопрос: Что делать? :?:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 25.04.2006 (Вт) 12:39

ListView.Items(index).Text
ListView.Items(Index).SubItems(index).Text

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 25.04.2006 (Вт) 13:52

Ramzes
Приветствую.
Спасибо за подсказку, но
как Index то выделенного в ListView элемента получить?

По идее должно быть так index=ListView.SelectedIndices;

но как я уже писал выше студия в этом случае тоже ругается:
"Form1.cs(537): Cannot implicitly convert type 'System.Windows.Forms.ListView.SelectedIndexCollection' to 'int'
"
Вот это я кстати совсем не понимаю. В описаниии этого свойства говориться что оно возвращает значение индексов выделенных элементов. Если выделен один элемент, то возвращает одно значение.
Так какого типа возвращается значение? Если его потом в int конвертировать нужно.

Пока воз и ныне там. :(

ЗЫ и самое обидное что в школе на уроках мы ничего подобного не делали. Добавляли, удаляли, сортировали по столбцам, показывали элементы в ListView, а вот считывать данные и помещать их в другой контрол - этого не было.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 25.04.2006 (Вт) 14:25

Код: Выделить всё
Dim i as integer
For i =0 to ListView.Items.Count-1
If ListView.Items(i).selected
Msgbox ListView.Items(i).text
MsgBox ListView.Items(i).subItems(2).text
End If
Next

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 25.04.2006 (Вт) 14:36

MSDN писал(а):Возвращает индексы выбранных в данный момент элементов в данном элементе управления.

[Visual Basic]
Public ReadOnly Property SelectedIndices As _
ListView.SelectedIndexCollection

[C#]
public ListView.SelectedIndexCollection SelectedIndices {get;}

[C++]
public: __property ListView.SelectedIndexCollection*
get_SelectedIndices();

[JScript]
public function get SelectedIndices() :
ListView.SelectedIndexCollection;

Значение свойства
ListView.SelectedIndexCollection, содержащая индексы выбранных элементов. Если в данный момент таких элементов нет, возвращается пустая ListView.SelectedIndexCollection.

Примечания
Когда свойство MultiSelect устанавливается равным true, это свойство возвращает коллекцию, содержащую индексы всех элементов, выбранных в ListView. Для ListView, в котором разрешен только единичный выбор, это свойство возвращает коллекцию из одного элемента, содержащую индекс единственного выбранного элемента из ListView. Дополнительные сведения об операциях над элементами в этой коллекции см. в ListView.SelectedIndexCollection.

Если для элемента управления ListView требуется получить коллекцию выбранных элементов, а не позиции индекса таких элементов, используйте свойство SelectedItems.

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 25.04.2006 (Вт) 23:01

Приветствую всех.
То что предложил Ramzes в предпоследнем посте выглядит так:
Код: Выделить всё
private void lstvKl_SelectedIndexChanged(object sender, System.EventArgs e)
      {
         for(int i=0;i<lstvKl.Items.Count;i++)
         {
            if(lstvKl.Items[i].Selected)
            {
               lblKlantData.Text=lstvKl.Items[i].Text+", "+lstvKl.Items[i].SubItems[1].Text+", "+lstvKl.Items[i].SubItems[2].Text+", "+lstvKl.Items[i].SubItems[3].Text+", "+lstvKl.Items[i].SubItems[4].Text+", "+lstvKl.Items[i].SubItems[5].Text;
            }
         }
         lstvKl.Visible=false;
      }


Ramzes
То что ты(можно надеюсь :) ) процетировал из библиотеки я уже читал. И попробовал использовать это. Но как я раньше писал это не работает.
То что ты предложил работает. Но как то это через одно место. :roll:
Я так и не понял почему index=ListView.SlectedIndices не срабатывает? :oops: Ведь я выделяю в ListView элемент и используя этот синтаксис должен получить index этого элемента, если не установлено свойство MultiSelect в true. Что возвращается: Index или коллекция из одного indexа?

Кстати вопрос в догонку. Я пишу этот код в обработчике события ListView_SelectedIndexChanged. А что означают два аргумента этого обработчика события? К примеру при коломн клик получаем через e.Colomn index столбца по которому кликнули. А тут что? :?:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 26.04.2006 (Ср) 9:41

Если MultiSelect = False можешь юзать не Selected а Focused :)

Раз ты уже убедился, что я могу цитировать MSDN, значит я его читаю, и это не сложно сделать, Намек понял? ;)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.04.2006 (Ср) 9:47

Thomas писал(а):То что ты предложил работает. Но как то это через одно место. :roll:
Я так и не понял почему index=ListView.SlectedIndices не срабатывает? :oops:


Нды, всё методом тыка... А отличить Integer от Integer() мы не можем...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 26.04.2006 (Ср) 9:51

Sebas
Не просто отличить, но и прочитать, то, что дали ;)
Ramzes писал(а):
Возвращает индексы выбранных в данный момент элементов в данном элементе управления.

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 26.04.2006 (Ср) 23:41

Ramzes
Sebas


Метод обучения "Фейсом об тейбл" действительно уникален и результативен.

Спасибо за науку. :D

Для остальных перевожу что хотели донести до меня Гуру.

ListView.SelectedIndices возвращает массив индексов выделенных элементов в ListView.(при MultiSelect=false массив содержит один индекс)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 27.04.2006 (Чт) 9:56

Thomas
Ниче, бывает... Главное желание, а мы, всегда рады помочь ;)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.04.2006 (Чт) 10:47

Ramzes писал(а):Thomas
Ниче, бывает... Главное желание, а мы, всегда рады помочь ;)


Ф об Т ?
Это мне напоминает:
-Вы не правильно берёте синкопу!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 27.04.2006 (Чт) 10:52

Я имел в виду не то, что мы всегда рады кого угодно фейсом об тейбл, а рады помочь, подтолкнуть человека в нужную сторону :)


Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

    TopList