Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
4 / 4 / 0
Регистрация: 21.08.2016
Сообщений: 404

LIstview содержимое в Label с количеством совпадение строк

06.07.2022, 17:36. Показов 1709. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Есть listview в котором отображается данные с datagridview столбцов 1 и 2.
В label мне надо вывести все listview строки с количеством совпадение.
Мне получается только если в коде написать конкретное слово которое есть в listview.
Как можно сделать так чтобы в label считывался весь listview и в конце количество совпадение строки?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void button4_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.RowCount; i++)
{
listView2.Items.Add(dataGridView1.Rows[i].Cells[1].Value.ToString() + " - " + dataGridView1.Rows[i].Cells[2].Value.ToString());
}
int count = 0;
foreach (ListViewItem item in listView2.Items)
{
if (item.SubItems[0].Text.ToString() == "Медведь - Белый")
count++;
 
ListViewItem item1 = listView2.FindItemWithText("Медведь - Белый");
if (item1 != null)
 
label3.Text = (item1 + " есть " + count.ToString() + " сообщения" + Environment.NewLine);
}
}
Миниатюры
LIstview содержимое в Label с количеством совпадение строк  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2022, 17:36
Ответы с готовыми решениями:

Вывести на экран содержимое вектора с наибольшим количеством строк
народ, написал программу на visual c++ для считывания всех строк из входного файла в структуру данных, а потом вывод на экран вектора строк...

Как вывести количество строк с listview в label, то бишь мне надо, чтоб отображалась количество строк
Пробовал так и сяк, но не получилось Я хочу вывести количество строк в Form1 из Form3 listView private void...

Как я могу загрузить содержимое одного listview в другой listview
Как я могу загрузить содержимое одного listview в другой listview? ListModel { id: model1 dynamicRoles: true } ...

29
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
08.07.2022, 23:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Uswer Посмотреть сообщение
мне как источник данных в памяти таблица кажется весьма привлекательным классом.
На том и порешим.
Цитата Сообщение от Uswer Посмотреть сообщение
Код собственного класса и его подклассов вырастет в разы
Отказать. Не обязательно.

Добавлено через 1 минуту
Это как в законах Мерфи: "Большие системы порождают большие проблемы. Не следует без необходимости плодить большие системы".
0
2293 / 1609 / 400
Регистрация: 26.06.2017
Сообщений: 4,773
Записей в блоге: 1
08.07.2022, 23:33
Цитата Сообщение от wizard41 Посмотреть сообщение
И в наших кругах принято это мнение "принять" к рассмотрению, привести доводы за/против и т.п.
Очень ценно, что в ваших кругах так. Вот только реальных доводов Вы также не привели, просто сказали и всё.
И кстати, я привёл код с таблицей не из-за "Вы хорошо знаете и применяете дтабл", а по причине анализа кода ТСа, в частности загрузки им данных:
C#
1
2
3
DataTable dt = new DataTable();
...
theDataAdapter.Fill(dt);
Что касается
Цитата Сообщение от wizard41 Посмотреть сообщение
с табличными данными эдак на несколько миллионов строк
решение, какую модель данных выбрать, принимается на основе анализа этих самых данных. Мне думается, что дтабле в данной теме (и многих других) более чем подходящий инструмент для работы, ходя и любые другие коллекции тоже можно использовать. Вот только зачем навязывать что-то иное правда не пойму.
Цитата Сообщение от wizard41 Посмотреть сообщение
Любитель поспорить?
Как в анекдоте "не любитель, а профессионал"
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
08.07.2022, 23:43
Цитата Сообщение от Uswer Посмотреть сообщение
Вы также не привели, просто сказали и всё.
У меня не было такой цели. Повторюсь - это было мое мнение, основанное на реальных наблюдениях. Доказывать кому-то этот факт не считаю необходимым, т.к. "страждущий познаний" сам найдет и разберется.
Цитата Сообщение от Uswer Посмотреть сообщение
а по причине анализа кода ТСа
Разумеется. Посему и мое замечание носило чисто рекомендательный характер. У ТС-а все заработает и так, а на следующий день он просто забудет задачу и тем более способы ее решения.
Цитата Сообщение от Uswer Посмотреть сообщение
Мне думается, что дтабле в данной (и многих других) темах более чем подходящий инструмент для работы,
При более-менее углубленном изучении практик решений подобных проблем, особенно в последнее время, Вы мало где обнаружите применение dt.
Цитата Сообщение от Uswer Посмотреть сообщение
Вот только зачем навязывать что-то иной правда не пойму.
Действительно. Вот только навязывания тут я нигде не нахожу. Ах, да, DataTable Вы навязываете - точно ни к чему.
Цитата Сообщение от Uswer Посмотреть сообщение
а профессионал
Оно и заметно.
0
2293 / 1609 / 400
Регистрация: 26.06.2017
Сообщений: 4,773
Записей в блоге: 1
09.07.2022, 00:00
wizard41, в целом я Вас услышал и с Вами согласен полностью. Однако всё это справедливо только для серьёзных проектов, о коих на данном форуме я давно не слышал. 90%, если не больше, всех тем здесь это темы учебного характера и каждый раз завсегдатаи показывают примитивный код, поэтому будем считать, что я тоже такой же примитив.
Цитата Сообщение от wizard41 Посмотреть сообщение
Ах, да, DataTable Вы навязываете - точно ни к чему.
Да, я настаиваю в данной теме на таблице, т.к. она априори легко решает возможные вопросы ТСа в дальнейшем, например по обновлению значений в сетке при изменениях в источнике.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
09.07.2022, 13:40
Лучший ответ Сообщение было отмечено Felikss как решение

Решение

Цитата Сообщение от Uswer Посмотреть сообщение
Да, я настаиваю в данной теме на таблице, т.к. она априори легко решает возможные вопросы ТСа в дальнейшем
Ваше право.
Однако, чтоб не быть совсем голословным и продемонстрировать мой подход к задаче - я все-таки сваял небольшой пример.
Честно говоря, я не совсем понял суть самого задания ТС - по мне так какая-то муть, но положим, что нам надо вывести количество одинаковых зверей в итоговый текстбокс.
Итак, начнем с базы (класса INPC):
abstract class InpcBase
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    internal abstract class InpcBase : INotifyPropertyChanged
    {
        #region PropertyChangedEventHandler
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void OnPropertyChanged( [CallerMemberName] string? PropertyName = null )
        {
            PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( PropertyName ) );
        }
        #endregion
 
        protected virtual bool Set<T>( ref T field, T value, [CallerMemberName] string? PropertyName = null )
        {
            if ( Equals( field, value ) ) return false;
            field = value;
            OnPropertyChanged( PropertyName );
            return true;
        }
    }

Далее, собственно класс, представляющий элемент (строку) в гриде:
class DgvData
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    internal class DgvData : InpcBase, IEquatable<DgvData>
    {
        private string _Animal;
        public string Animal { get => _Animal; set => Set( ref _Animal, value ); }
 
        private string _Color;
        public string Color { get => _Color; set => Set( ref _Color, value ); }
 
        public DgvData( string animal, string color )
        {
            Animal = animal;
            Color = color;
        }
 
        #region IEquatable<DgvData>
        public bool Equals( DgvData? other )
        {
            if ( other == null )
                return false;
            return Animal == other.Animal && Color == other.Color;
        }
 
        public override bool Equals( object obj )
        {
            if ( obj == null )
                return false;
            DgvData? tObj = obj as DgvData;
            if ( tObj == null ) return false;
            else return Animal == tObj.Animal && Color == tObj.Color;
        }
 
        private string SSN => Animal + Color;
        public override int GetHashCode() => SSN.GetHashCode(); 
        #endregion
    }

И сам код формы:
class Form1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    public partial class Form1 : Form
    {
        BindingList<DgvData> DgvSource = new();
 
        public Form1()
        {
            InitializeComponent();
            dgv1.DataSource = DgvSource;
        }
 
        private void btAdd_Click( object sender, EventArgs e )
        {
            if ( !string.IsNullOrEmpty( textBox1.Text ) && !string.IsNullOrEmpty( textBox2.Text ) )
                DgvSource.Add( new DgvData( textBox1.Text, textBox2.Text ) );
            Output();
        }
 
        private void Output()
        {
            Dictionary<DgvData, int> dic = new();
            textBox3.Clear();
 
            foreach ( DgvData d in DgvSource )
            {
                if ( dic.ContainsKey( d ) )
                {
                    dic[ d ]++;
                    continue;
                }
                dic.Add( d, 1 );
            }
            foreach ( KeyValuePair<DgvData, int> kvp in dic )
                textBox3.Text += $"{kvp.Key.Animal}-{kvp.Key.Color} : {kvp.Value} шт.{Environment.NewLine}";
        }
    }

Все. Как можно увидеть - нет никаких танцев с DataTable, rows, columns и прочего мусора. Новые объекты очень легко добавлять в список, который привязан к гриду (в одном месте!).
Работает это так:
Test.mp4
1
2293 / 1609 / 400
Регистрация: 26.06.2017
Сообщений: 4,773
Записей в блоге: 1
09.07.2022, 15:22
Цитата Сообщение от wizard41 Посмотреть сообщение
нет никаких танцев с DataTable, rows, columns и прочего мусора
Ха, так и данные у вас появляются при вводе пользователем. А весь сыр бор с дтабле только из-за того, что я таблицу наполнил в коде, если убрать метод CreateTable и добавить добавление данных подобное вашему, то получим ровно тоже самое. Кстати портянка Ваша ничуть не меньше моей. Считаю дальнейший спор бесполезным, т.к. ТСу похоже всё равно, а нам перетягивание каната ни к чему.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
09.07.2022, 17:28
Цитата Сообщение от Uswer Посмотреть сообщение
Считаю дальнейший спор бесполезным
Какие споры, давайте просто предоставим читателям повод для размышлений и возможность выбора стратегии. ТС-у то понятно ничего не нужно, но кроме него сюда заходят и другие люди.
Цитата Сообщение от Uswer Посмотреть сообщение
Кстати портянка Ваша ничуть не меньше моей.
На самом деле немного меньше. Но суть не в этом. Так Вы приучите начинающих мерить весьма субъективным мерилом - количеством строк, например.
Есть в коде, допустим, 10 if'ов и мы пишем их классически:
C#
1
2
3
4
    if (/*что-то там*/)
    {
        // что-то где
    }
10 таких if * 4 строки в каждом = 40 строк.
Запишем по иному:
C#
1
    if (/*что-то там*/) { /*что-то где*/; }
Опа! И 30 строк кода как не бывало! Хотя функционал не изменился нисколько. Посему измерять в строках так себе идея.
А вот если посмотреть в сторону кол-ва применений созданных методов и гибкости для дополнения/изменения данных - тут ситуация становится противоречивой ).
Ну и последнее: пару лет назад я проходил испытания в одну контору, так вот в задании по выборке и работе с БД применение DataTable исключалось, как несоответствие шаблонам компании. Т.е. понятно, что с вырожденной технологией мало кто работает.
0
4 / 4 / 0
Регистрация: 21.08.2016
Сообщений: 404
09.07.2022, 22:30  [ТС]
wizard41,
Спасибо вам за предоставленный код.
Все теперь работает отлично. (Фото)

Вместо textbox1 вставыл dataGridView1.Rows[i].Cells[1].Value?.ToString()
Вместо textbox2 вставыл dataGridView1.Rows[i].Cells[2].Value?.ToString()
И в Output textbox3 вставыл label.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
 
namespace SpellCheck
{
    internal abstract class InpcBase : INotifyPropertyChanged
    {
        #region PropertyChangedEventHandler
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
        }
        #endregion
 
        protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
        {
            if (Equals(field, value)) return false;
            field = value;
            OnPropertyChanged(PropertyName);
            return true;
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace SpellCheck
{
    internal class DgvData : InpcBase, IEquatable<DgvData>
    {
        private string _Animal;
        public string Animal { get => _Animal; set => Set(ref _Animal, value); }
 
        private string _Color;
        public string Color { get => _Color; set => Set(ref _Color, value); }
 
        public DgvData(string animal, string color)
        {
            Animal = animal;
            Color = color;
        }
 
        #region IEquatable<DgvData>
        public bool Equals(DgvData other)
        {
            if (other == null)
                return false;
            return Animal == other.Animal && Color == other.Color;
        }
 
        public override bool Equals(object obj)
        {
            if (obj == null)
                return false;
            DgvData tObj = obj as DgvData;
            if (tObj == null) return false;
            else return Animal == tObj.Animal && Color == tObj.Color;
        }
 
        private string SSN => Animal + Color;
        public override int GetHashCode() => SSN.GetHashCode();
        #endregion
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   private void button9_Click(object sender, EventArgs e)
        {       
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (!string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[1].Value?.ToString()) && !string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[2].Value?.ToString()))
                    DgvSource.Add(new DgvData(dataGridView1.Rows[i].Cells[1].Value?.ToString(), dataGridView1.Rows[i].Cells[2].Value?.ToString()));
                Output();
            }
        }
 
        private void Output()
        {
            Dictionary<DgvData, int> dic = new Dictionary<DgvData, int>(); 
            label5.Text= "";
 
            foreach (DgvData d in DgvSource)
            {
                if (dic.ContainsKey(d))
                {
                    dic[d]++;
                    continue;
                }
                dic.Add(d, 1);
            }
            foreach (KeyValuePair<DgvData, int> kvp in dic)
                label5.Text += $"{kvp.Key.Animal}-{kvp.Key.Color} : {kvp.Value} шт.{Environment.NewLine}";
        }
    }
Миниатюры
LIstview содержимое в Label с количеством совпадение строк  
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
10.07.2022, 10:25
Цитата Сообщение от Felikss Посмотреть сообщение
Все теперь работает отлично
Думается мне, что вы нагородили огород. Механизм получения данных и привязки к гриду у вас остались старые (DataTable), а из моего кода вы используете только класс DgvData, BindingList<DgvData> и метод Output().
BindingList DgvSource в моем варианте служит источником данных для грида. Вы же теперь суете туда данные из грида. Поэтому это избыточно, BindingList тогда можно (нужно) заменить на List<>, class InpcBase вообще вам не нужен, т.е. DgvData наследуем только от IEquatable<DgvData>, т.к. в словаре вывода Dictionary<DgvData, int> в качестве ключа находится сложный объект.
Работать то оно работает, только получился избыточный код.
Цитата Сообщение от Felikss Посмотреть сообщение
!string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[1].Value...
Опять же - у вас есть источник DataTable, ковыряйте нужные ячейки из него. Зачем лезть в сам грид?
0
2293 / 1609 / 400
Регистрация: 26.06.2017
Сообщений: 4,773
Записей в блоге: 1
10.07.2022, 15:43
Цитата Сообщение от wizard41 Посмотреть сообщение
у вас есть источник DataTable
Felikss, ну раз начали применять классы DgvData и BindingList<DgvData>, то и загружать данные надо в них же, а то каша какая-то. Да и зачем к dataGridView1 обращаться - обрабатывать надо источник какой бы он ни был.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2022, 15:43

Ввод матрицы с заданным пользователем количеством столбцов и неизвестным количеством строк
Доброго времени суток. Пытаюсь написать программу, в которой нужно будет сначала задать количество столбцов матрицы, а затем вводить строки...

Реализация функции отображения найденных данных в listview (частичное совпадение)
Добрый день! Подскажите, как можно реализовать функцию по поиску в listview1​ данных (в любом столбце), критерий - частичное...

Совпадение строк
Необходимо проверить совпадение строк, т.е. у меня есть в базе 2 слова Стол и Стул на форме есть поле для ввода, когда я ввожу букву С,...

ListView с изменяющимся количеством элементов
Нужно реализовать виджет ListView с изменяющимся количеством элементов. Пытался реализовать свой адаптер-наследник от ArrayAdapter и в...

Массив(совпадение строк)
Можете помочь. Если в матрице первая и последняя строки совпадают поэлементо, то найти произведение и сумму значений элементов всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru