Данные плохо добавляются в ListView. (форма окна С#)

Я добавил 3 столбца.

Измененные значения атрибутов следующие.

  1. Посмотреть детали
  2. Онвер - правда
  3. ГирдЛайнс - Верно
  4. FullRowSelect — Истина
namespace TestWinForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void add_Click(object sender, EventArgs e)
        {
            //listView1.BeginUpdate();
            string[] row = { "123", "456", "789" };
            ListViewItem list_view = new ListViewItem(row);
            listView1.Items.Add(list_view);
            textBox1.Text = listView1.Items.Count.ToString();
            //listView1.EndUpdate();
        }
    }
}

Это код, который обновляет количество текущих строк до textbox1 после добавления строки данных каждый раз, когда нажимается кнопка add.

Очевидно, количество строк продолжает расти.... но данные не выводятся в listView1.

Какую часть я должен проверить?

Вы действительно добавили столбцы в ListView? Я бы, наверное, порекомендовал не использовать ListView в любом случае. В большинстве случаев, когда люди это делают, они должны использовать DataGridView, обычно привязанный к DataTable или другому источнику данных через BindingSource.

John 17.05.2022 09:03

Что означает Владелец - Правда? Вы поставили OwnerDraw = true? Если да, то вам придется рисовать предметы самостоятельно. Ты?

Jimi 17.05.2022 09:15

Да, вы правы насчет ownerDraw. Я попробую еще раз, используя DataGridView. Спасибо

seonguk.jeon 18.05.2022 03:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Давно не использовал Winforms, но я помню, что использование источника привязки было более надежным.

var bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
grid.DataSource = bindingSource;

//Add data to dataTable and then call

bindingSource.ResetBindings(false)  

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

John 17.05.2022 09:04

Спасибо за информацию, попробую.

seonguk.jeon 18.05.2022 03:54
Ответ принят как подходящий

То, что у вас есть, должно работать в подробном представлении с добавленными столбцами. Вот пример

Представление «Дизайн»

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

public class Contact
{
    public int CustomerIdentifier { get; set; }
    public string CompanyName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneTypeDescription { get; set; }
    public string PhoneNumber { get; set; }
    public string CountryName { get; set; }
    public string[] ItemArray => new[]
    {
        CompanyName,
        FirstName,
        LastName,
        PhoneNumber,
        CountryName
    };
}

Код для фиктивного добавления

private void AddRowButton_Click(object sender, EventArgs e)
{
    var companyName = "Just added";

    Contact contact = new Contact()
    {
        CompanyName = companyName,
        FirstName = "Karen",
        LastName = "Payne",
        PhoneNumber = "123-333-4444",
        CountryName = "USA"
    };

    ownerContactListView.Items.Add(
        new ListViewItem(contact.ItemArray)
        {
            Tag = contact.CustomerIdentifier
        });

    CountLabel.Text = $@"Row count: {ownerContactListView.Items.Count}";

    var index = ownerContactListView.Items.IndexOf(
        ownerContactListView.FindItemWithText(companyName));

    ownerContactListView.Items[index].Selected = true;
    ownerContactListView.EnsureVisible(index);
    ActiveControl = ownerContactListView;
}

После добавления строки выше (обратите внимание, я сокращаю форму, поэтому вы видите частичный вид)

Вы можете увидеть всю начальную загрузку, см. следующее.

Спасибо за Вашу информацию. Я попробую и протестирую.

seonguk.jeon 18.05.2022 03:54

Другие вопросы по теме