Nano Hash - криптовалюты, майнинг, программирование

Сохранить скрытое значение (id) в ListView

У меня есть ListView, где я показываю список объектов (лиц) с их соответствующими свойствами, а именно: имя (строка), возраст (int). Но у этих объектов также есть свойство id, которое используется, чтобы отличать их друг от друга.

Вопрос в том, как "правильно" сохранить значение идентификатора, чтобы получить его, когда я нажимаю на элемент, представляющий объект?

Для этого я использую скрытый столбец (ширина столбца = 0), но я думаю, что это не очень хороший способ.

foreach (var person in col.listPersons )
{
    ListViewItem lIt = new ListViewItem(person.id); //Column with width = 0
    lIt.SubItems.Add(person.name);
    lIt.SubItems.Add(person.age);
    lPer.Items.Add(lIt) //Add the item to ListView
}
11.06.2016

  • Правильным способом было бы использовать DataGridView, чтобы все не преобразовывалось в строку (или не упаковывалось как объект с использованием тега), даты оставались датами, целые числа оставались целыми числами и т. д. 12.06.2016

Ответы:


1

Простой способ добавить дополнительные атрибуты данных — использовать свойство Tag. Вы можете назначить объекту класса несколько свойств или простое скалярное значение, такое как ваш идентификатор. Тег довольно универсален и является общим свойством многих элементов управления.

Наше определение человека.

public class Person
{
    public long id { get; set; }
    public string name { get; set; }
    public int age { get; set; }
}

Пример 1. Назначьте идентификатор свойству тега ListViewItem.

foreach (var person in col.listPersons)
{
    ListViewItem lIt = new ListViewItem();
    lIt.Tag = person.id;
    lIt.SubItems.Add(person.name);
    lIt.SubItems.Add(person.age.ToString());
    lPer.Items.Add(lIt); // Add the item to ListView
}

Затем вы можете легко снова получить значение идентификатора:

ListViewItem lit = sender as ListViewItem;
person.id = (long)lit.Tag;

Пример 2. Назначьте весь объект человека свойству тега ListViewItem.

foreach (var person in col.listPersons)
{
    ListViewItem lIt = new ListViewItem();
    lIt.Tag = person;
    lIt.SubItems.Add(person.name);
    lIt.SubItems.Add(person.age.ToString());
    lPer.Items.Add(lIt); // Add the item to ListView
}

Так же легко снова получить объект человека:

ListViewItem lit = sender as ListViewItem;
person = (Person)lit.Tag;

Пример 3. Другой распространенный способ — использовать свойство ListViewItem.Name. Имя обрабатывается как ключ в ListView. Затем вы можете использовать это значение ключа для перехода к ListView.Items.IndexOfKey() или ListView.Items["key"] для поиска определенного элемента в ListView. Имя представляет собой строку и, как таковое, не такое гибкое, как тег, но это может быть более идеальным для вашего варианта использования.

foreach (var person in col.listPersons)
{
    ListViewItem lIt = new ListViewItem();
    lIt.Name = person.id; // Treat the Name as a Key
    lIt.SubItems.Add(person.name);
    lIt.SubItems.Add(person.age);
    lPer.Items.Add(lIt); // Add the item to ListView

    // Retrieve the person back from the ListViewItemCollection by index.
    var personIndex = lPer.Items.IndexOfKey(person.id.ToString());
    var lItA = lPer.Items[personIndex];

    // Retrieve the person back from the ListViewItemCollection by key.
    var lItB = lPer.Items[person.id.ToString()];
}
11.06.2016
  • Это именно то, что мне нужно. ПД: Буен ник :) 12.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..