4 / 4 / 0
Регистрация: 21.08.2016
Сообщений: 404

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

06.07.2022, 17:36. Показов 1733. Ответов 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
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
08.07.2022, 23:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Uswer Посмотреть сообщение
мне как источник данных в памяти таблица кажется весьма привлекательным классом.
На том и порешим.
Цитата Сообщение от Uswer Посмотреть сообщение
Код собственного класса и его подклассов вырастет в разы
Отказать. Не обязательно.

Добавлено через 1 минуту
Это как в законах Мерфи: "Большие системы порождают большие проблемы. Не следует без необходимости плодить большие системы".
0
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1
08.07.2022, 23:33
Цитата Сообщение от wizard41 Посмотреть сообщение
И в наших кругах принято это мнение "принять" к рассмотрению, привести доводы за/против и т.п.
Очень ценно, что в ваших кругах так. Вот только реальных доводов Вы также не привели, просто сказали и всё.
И кстати, я привёл код с таблицей не из-за "Вы хорошо знаете и применяете дтабл", а по причине анализа кода ТСа, в частности загрузки им данных:
C#
1
2
3
DataTable dt = new DataTable();
...
theDataAdapter.Fill(dt);
Что касается
Цитата Сообщение от wizard41 Посмотреть сообщение
с табличными данными эдак на несколько миллионов строк
решение, какую модель данных выбрать, принимается на основе анализа этих самых данных. Мне думается, что дтабле в данной теме (и многих других) более чем подходящий инструмент для работы, ходя и любые другие коллекции тоже можно использовать. Вот только зачем навязывать что-то иное правда не пойму.
Цитата Сообщение от wizard41 Посмотреть сообщение
Любитель поспорить?
Как в анекдоте "не любитель, а профессионал"
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
08.07.2022, 23:43
Цитата Сообщение от Uswer Посмотреть сообщение
Вы также не привели, просто сказали и всё.
У меня не было такой цели. Повторюсь - это было мое мнение, основанное на реальных наблюдениях. Доказывать кому-то этот факт не считаю необходимым, т.к. "страждущий познаний" сам найдет и разберется.
Цитата Сообщение от Uswer Посмотреть сообщение
а по причине анализа кода ТСа
Разумеется. Посему и мое замечание носило чисто рекомендательный характер. У ТС-а все заработает и так, а на следующий день он просто забудет задачу и тем более способы ее решения.
Цитата Сообщение от Uswer Посмотреть сообщение
Мне думается, что дтабле в данной (и многих других) темах более чем подходящий инструмент для работы,
При более-менее углубленном изучении практик решений подобных проблем, особенно в последнее время, Вы мало где обнаружите применение dt.
Цитата Сообщение от Uswer Посмотреть сообщение
Вот только зачем навязывать что-то иной правда не пойму.
Действительно. Вот только навязывания тут я нигде не нахожу. Ах, да, DataTable Вы навязываете - точно ни к чему.
Цитата Сообщение от Uswer Посмотреть сообщение
а профессионал
Оно и заметно.
0
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1
09.07.2022, 00:00
wizard41, в целом я Вас услышал и с Вами согласен полностью. Однако всё это справедливо только для серьёзных проектов, о коих на данном форуме я давно не слышал. 90%, если не больше, всех тем здесь это темы учебного характера и каждый раз завсегдатаи показывают примитивный код, поэтому будем считать, что я тоже такой же примитив.
Цитата Сообщение от wizard41 Посмотреть сообщение
Ах, да, DataTable Вы навязываете - точно ни к чему.
Да, я настаиваю в данной теме на таблице, т.к. она априори легко решает возможные вопросы ТСа в дальнейшем, например по обновлению значений в сетке при изменениях в источнике.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 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
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1
09.07.2022, 15:22
Цитата Сообщение от wizard41 Посмотреть сообщение
нет никаких танцев с DataTable, rows, columns и прочего мусора
Ха, так и данные у вас появляются при вводе пользователем. А весь сыр бор с дтабле только из-за того, что я таблицу наполнил в коде, если убрать метод CreateTable и добавить добавление данных подобное вашему, то получим ровно тоже самое. Кстати портянка Ваша ничуть не меньше моей. Считаю дальнейший спор бесполезным, т.к. ТСу похоже всё равно, а нам перетягивание каната ни к чему.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 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
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 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
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 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 18.08.2026
Пролетают летом дни Тридцать пять жары в тени. Каждый август год от года Дарит жаркую погоду.
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru