vb.net Jak zliczyć values w kolumnie datagrid aby pokazało ich liczbę

0

Hej
Jak w vb.net VB10 używają datagridview zliczyć kolumnę z tymi samymi tekstami aby dodatkowy labelpokazał ich liczbę. Potrafię zrobić sumowanie liczb ale chodzi mi o coś takiego że np. w kolumnie o nazwie Kolor posiadam 150 wartości no i pod tabelą mam jakiś label który chciałbym aby pokazał mi w postaci liczby ile razy np. występuje kolor zielony.
Przychodzi mi do głowy pomysł tylko aby funkcją find pokazało rekordy z wybranym kolorem i później funkcją count przeliczyło ilość wierszy, ale chciałbym zrobić to trochę bardziej dynamicznie, załączam aplikację i od razu pokazuje mi liczbę wybranego który sobie ustalę.

0

Pod DataGridView.DataSource masz zbindowany prawdopodobnie DataSet albo BindingListView.
Co by to nie było obsługuje LINQ, nie znam składni VB.NET, ale w C# coś takiego: list.Count(x => x.Color == Color.Green);

0

to nie ma nic wspólnego z funkcją color.green podałem przykład value. Nie chodzi o fizyczny kolor zielony tylko o zwykły tekst, np. w kolumnie znajduje się tekst "autobus", "autobus" " autobus" no i poniżej label pokazuje liczbę = 3

0

Nie bardzo kumam co chcesz osiągnąć, ale zakładam, że wiesz jak porównywać kolor, a jak napisy ? :)

0

heheheh chce aby label zliczył mi ile razy w kolumnie występuje taka sama wartość :)

0

No dobra, ale w kolumnie możesz mieć np. "Kot", "Pies", "Pies", "Rybka" i co wtedy chcesz wyświetlić ? 2 jako, że najwięcej jest psów ? czy może 1, 2, 1 ? A może chcesz żeby ktoś wpisał np. w polu Kot i wtedy pojawi się 1, a jak Pies to 2 ???

0

Jeśli będzie w kolumnie np. "Kot", "Pies", "Pies", "Rybka", "Kot", "Pies", "Pies", "Rybka" to chcę aby label pokazał ile razy ten sam wyraz znajduje się w tej kolumnie czyli aby pokazał:
Labelkot = 2
LabelPies = 4
LabelRybka = 2

labele umieszczone poza datagridview całkowicie osobno niezintegrowane tabelą w żaden sposób tylko ten opisany który chcę osiągnąć.

0

Czyli chcesz tworzyć tyle labeli ile masz różnych wartości w wierszach ? Te label-e chcesz generować dynamicznie i doklejać do okna ?

0

nie chce nic tworzyć chcę aby label zliczył mi ile razy przeze mnie wybrana wartość występuje w columnie Kraj, w tym przypadku np. Argentyna, wciskam jakiś tam button1 i label1.text pokazuje mi liczbę 3. Nie chce nic więcej, nie chcę aby filtrował, sortował, grupował chcę tylko liczbę tych samych powtarzających się tekstów.
sorry, że w excelu,
user image

0

OK, teraz rozumiem, jest jasne.

No to wiele się nie zmienia, w DataGridView masz zdarzenie CurrentCellChanged, tam powinieneś mieć dostęp do wartości z zaznaczonej komórki oraz wiersz i kolumnę tej komórki, sprawdzasz czy komórka w odpowiedniej kolumnie, pobierasz wartość z komórki, a potem tak jak pisałem wcześniej LINQ-iem zliczasz sobie ilość obiektów i wynik wstawiasz do label-a. Powinieneś mieć pod DataSource podpięty DataSet lub BindingListView lub generalnie coś co dziedziczy z IList.

W przypadku dużego zbioru danych może przymulić.

Pisząc wiersz i kolumna mam na myśli ich numery w DataGridView, porównanie sobie zrobisz object.Equals(selectedCellValue, myObject.PropertyName);
Jeżeli zmienna z komórki jest Twoim typem to warto zrobić override Equals-a.

0

ok będę próbował dzięki

0

Jakbyś miał jakieś problemy to pisz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1