От новичка до гуру: Курсы программирования на CyberDuff

Как удалить столбцы из ListView С#

Я новичок в ListView и столкнулся с небольшой проблемой:

У меня есть ListViewin WinForm, который я заполняю строку за строкой со многими столбцами (около 15), позже у меня есть возможность сохранить ListView в CSV. я хочу, чтобы пользователь мог удалить ненужные столбцы из ListView .

Моя функция для создания столбцов сначала

    private void checkAddListBoxColumns(DomainLayer.ScriptLogic.session sessionToAdd)
    {
        if (IsResultLogListViewFirstRun)
        {
            IsResultLogListViewFirstRun = false;
            this.Invoke((MethodInvoker)delegate
            {
                ResultsLogTab_ListView.Columns.Clear();
            });

            foreach (var item in sessionToAdd.comments.Keys)
            {
                this.Invoke((MethodInvoker)delegate
                {
                    ResultsLogTab_ListView.Columns.Add(item);
                });
            }
            McsTableRow mcsTR = new McsTableRow();
            Type t = mcsTR.GetType();
            foreach (/*PropertyInfo*/FieldInfo info in t.GetFields())
            {
                this.Invoke((MethodInvoker)delegate
                {
                    ResultsLogTab_ListView.Columns.Add(info.Name+" 1");
                });
            }
            foreach (FieldInfo info in t.GetFields())
            {
                this.Invoke((MethodInvoker)delegate
                {
                    ResultsLogTab_ListView.Columns.Add(info.Name+" 2");
                });
            }
            this.Invoke((MethodInvoker)delegate
            {
                ResultsLogTab_ListView.Columns.Add("Effective PHY Rate");
            });
            //...more of the same
        }
        else
        {
            //?
        }
    }

позже я добавляю строку типа

            private OnSessionToAdd()
            {
            foreach (string key in sessionToAdd.comments.Keys)
            {
                item.SubItems.Add(sessionToAdd.comments[key]);
            }

            Type t = sessionToAdd.CurrentMCSCheck.firstMcsRow.GetType();

            foreach (FieldInfo info in t.GetFields())
            {
                string x = info.GetValue(sessionToAdd.CurrentMCSCheck.firstMcsRow) as string;
                item.SubItems.Add(x);
            }

            t = sessionToAdd.CurrentMCSCheck.secondMcsRow.GetType();

            foreach (FieldInfo info in t.GetFields())
            {
                string x = info.GetValue(sessionToAdd.CurrentMCSCheck.secondMcsRow) as string;
                item.SubItems.Add(x);
            }

            item.SubItems.Add(sessionToAdd.CurrentMCSCheck.EffectivePHYRate);

            this.Invoke((MethodInvoker)delegate
            {
             ResultsLogTab_ListView.Items.Add(item);
            });
            }

Мне нужен способ получить все имена столбцов, а затем удалить столбцы по имени или какой-то IndexOf (имя)

Пожалуйста, укажите мне правильное направление

ИЗМЕНИТЬ

просто для ясности я не скрываю столбцы (ширина настроек = 0) я хочу удалить их, чтобы помочь вам понять мою точку зрения, я добавил, как я сохраняю ListView, как я сохраняю в CSV:

public StringBuilder ListViewToCSV(ListView listView, string filePath, bool includeHidden)
{
    //make header string
    StringBuilder result = new StringBuilder();
    WriteCSVRow(result, listView.Columns.Count, i => includeHidden || listView.Columns[i].Width > 0, i => listView.Columns[i].Text);

    //export data rows
    foreach (ListViewItem listItem in listView.Items)
        WriteCSVRow(result, listView.Columns.Count, i => includeHidden || listView.Columns[i].Width > 0, i => listItem.SubItems[i].Text);

    return result;

}

private static void WriteCSVRow(StringBuilder result, int itemsCount, Func<int, bool> isColumnNeeded, Func<int, string> columnValue)
{
    bool isFirstTime = true;
    for (int i = 0; i < itemsCount; i++)
    {
        if (!isColumnNeeded(i))
            continue;

        if (!isFirstTime)
            result.Append(",");
        isFirstTime = false;

        result.Append(String.Format("\"{0}\"", columnValue(i)));
    }
    result.AppendLine();
}

чем просто сохранить StringBuilder

17.09.2014

  • Это ВПФ? WinForms? 17.09.2014
  • сори, это winform --› Отредактированный вопрос 17.09.2014
  • Самый лучший вопрос :) 17.09.2014

Ответы:


1

Вы можете ссылаться на столбец по имени.

var columnToRemove = ResultsLogTab_ListView.Columns["Name Of Column"];

а затем удалить его

ResultsLogTab_ListView.Columns.Remove(columnToRemove);

Все это задокументировано на MSDN — отличный ресурс.

Обновлять

Что касается сохранения/загрузки из CSV, скажем, у вас есть List<string> имен столбцов (полученных из указанного CSV-файла), которые вы хотите сохранить, тогда вы можете использовать LINQ, чтобы найти столбцы, которые не совпадают, а затем перебрать результат, чтобы удалить их.

using System.Linq;

...

var columnNames = new List<string> { "one", "two", "three" };

var columnsToDelete = ResultsLogTab_ListView.Columns.Where(c => !columnNames.Contains(c.Name));

foreach(var column in columnsToDelete)
{
     ResultsLogTab_ListView.Columns.Remove(column);
}
17.09.2014
  • +1 ваше обновление отличное !! не могли бы вы показать, как я могу получить имена столбцов ListView 17.09.2014
  • Фиксированная ссылка. Вы имеете в виду имена столбцов ListView или имена из CSV? 17.09.2014
  • имена столбцов из ListView --> Я думаю, у меня есть ответ на этот вопрос: stackoverflow.com/questions/14985240/ 17.09.2014
  • ColumnHeader имеет свойство Name. Еще раз, это здесь, на MSDN 17.09.2014
  • Спасибо за помощь ! 17.09.2014
  • Новые материалы

    Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
    Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..