[C++] DataGrid jako macierz


(Jedras121) #1

Witam.

Chciałbym wykorzystać DataGridView jako reprezentację macierzy. I mam problem :frowning: ponieważ:

  • nie wiem jak zmieniać suwakiem (VScrollBar) ilość kolumn i wierszy, (jak pobrać wartość z VScrollBar to oczywiście wiem)

  • nie wiem jak odczytać z danego wiersza i kolumny wartość

Może ktoś pomóc?


(Fiołek) #2

DGV nie jest jedynym rozwiązaniem, bo wszystko można oprzeć na zwykłych TextBoxach czy NumericUpDown(czy czymkolwiek innym w co da się coś wpisać), ale napisać to w oparciu o DGV będzie najłatwiej.

Wartości poszczególnych komórek odczytuje się poprzez właściwość Rows(kolekcja wiersz) pobierając wybrany wiersz(operator[] jest przeładowany) i wybierając z niego odpowiednią komórkę(właściwość Cells - też ma przeładowany indekser). Wartość zapisana jest we właściwości Value - wystarczy ją odpowiednio zrzutować/sparsować. Takie rozwiązanie będzie łatwe w implementacji, ale za każdym razem trzeba będzie parsować wartości.


(Jedras121) #3

Ok, dzięki Fiołek. Jakoś sobie poradziłem. Mam jeszcze jeden problem.

Mianowicie mam 2 scrolle i chciałbym uzależnić jeden od drugiego. Tzn. jeśli jeden przesuwam (zmieniam wartość) to drugi też powinien równocześnie zmieniać wartość. Próbowałem coś zrobić, ale za bardzo mi nie wychodziło, bo pomimo, że przypisałem do drugiego scrolla wartość pierwszego to nie wiedziałem jak go odświeżyć aby było widać zmianę wartości.


(Fiołek) #4

Jeśli zmienisz wartość Value to scroll bar sam się odświeży.

Dwa scroll bary(vScrollBar1 i vScrollBar1), "synchronizują" swoje wartości obsługując zdarzenia ValueChanged:

private void vScrollBar1_ValueChanged(object sender, EventArgs e)

{

   vScrollBar2.Value = vScrollBar1.Value;

}


private void vScrollBar2_ValueChanged(object sender, EventArgs e)

{

   vScrollBar1.Value = vScrollBar2.Value;

}

(Jedras121) #5

Fiołek, co prawda twoja zdarzenia nie zadziałały, ale zmieniłem na Scroll i teraz wsio gra.

Ok, mam jeszcze jedno pytanie. Czy jest możliwe nadanie danemu wierszowi nazwę, wyświetlaną w DGV? I jeśli tak to jak to zrobić 8)


(Fiołek) #6

Nie zadziałały bo kod nie był "copy-paste ready".

Nazwę dla wiersza? Z tego co wiem - nie da się(w WF, w WPF DataGridRow ma pole Name, ale służy do czego innego), lecz nic nie stoi na przeszkodzie by dodać kolumnę na tą nazwę.


(Jedras121) #7

Potem też doszedłem, że twój kod działa.

Tak coś czułem, że nie można dodać nazwy, bo już trochę się naszukałem, ale wolałem się upewnić.