Scheduler przy użyciu Windows Forms

0

Musze zrobic terminarz rezerwacji usług dla salonu kosmetycznego.
Ma to byc cos interaktywnego (np. a'la kalendarz gmaila). Klika sie w komorke, wybiera usluge, a program sam koloruje odpowiednia ilosc kratek w zaleznosci od dlugosci trwania uslugi.

I teraz moje pytania w kwesti jak zaczac:

  • jakiego komponentu najlepiej uzyc? DataGridView?
  • jak zrobic, zeby nagłowkami wierszy były godziny? (powiedzmy co 15 minut)
  • jak zrobic, zeby naglowkami wierszy byly pomieszczenia? Tu bedzie troche ardziej skomplikowane (chyba), bo ilosc kolumn nie moze byc przypisana na sztywno - bedzie zalezna od ilosci pomieszczen, ktore sa zdefiniowane w bazie danych.

I moze ew jakies inne wskazowki, jesli ktos robil cos podobnego i wiem, jak i z czym to sie je.

Z góry dzieki!

0

Jesli wątpisz w DGV, to znaczy ze nie probowales nigdy 'rozszerzyc' go sobie jeszcze.. w tym momencie mozesz natrafic na niezly kołtun problemow, zaleznie od tego jakie ficzery dokladnie chcialbys w niego jeszcze wcisnac poza tym co on juz ma w sobie. Jezeli "zmian" w wygladzie i zachowaniu potrzebujesz wykonac duzo, a wymiary Twojej tabelki nie maja byc zbyt olbrzymie, oraz komputery zakladasz w miare szybkie, to prostsze moze Ci sie okazac narysowanie tego czego chcesz "recznie"..

Ale, jesli chcialbys do tego uzyc DGV to sie oczywiscie da! W zasadzie, on nawet jest (wzglednie) niezle przygotowany do upiekszania i "poprawiania" go wedlug wlasnego widzi mi sie.

Jesli chodzi o nagłówki kolumn, to pewnie zauwazyles ze jest to dosc banalne. Jesli chodzi o wiersze - juz mniej. Nie zebym sie lenił, ale nie chce kopiowac i tlumaczyc rzeczy znajdowalnych latwo na google.. poszukaj czegos w stylu "C# how to display row numbers on DataGridView" poniewaz zazwyczaj ludzie tego szukaja. Otrzymasz kodzik ktory powoduje ze w naglowkach wierszy narysowywane sa kolejne numery (tak, doslownie, trzeba to zrobic "recznie"). Zeby to zmienic na kolejne godziny poczawszy np. od 8:00, na pewno dasz rade:)

btw. dla DGV ilosc kolumn do naglowkow wierszy nie ma zadnego znaczenia

0

Masz racje, nie próbowalem sie jeszcze bawic data gridem (no ewentualnie kolorwanie wierszy w petli for each dla zadanego parametru). Ogolnie technologie dopiero poznaje piszac.. prace inzynierska. Co łatwiejsze ficzersy juz oprogramowalem, w zasadzie zostal mi tylko ten cholerny scheduler.

Mowisz, ze naglowki kolumn sa dosc banalne? Przy statycznej ilosci oczywiscie tak, troche gorzej, jak ilosc ma byc dynamiczna i uzalezniona od ilosci wierszy w tabeli "Stanowisko" w bazie.

Nie ukrywam, ze jestem troche newbie, choc mam duza chec sie tego nauczyc i zrobic program samodzielnie od poczatku do konca. Aczkolwiek rada osob doswiadczonych zawsze sie przyda.

Ogolnie funkcjonalnosc ma wygladac nastepujaco:

  • powinna sie generowac tabela o sztywnej ilosc wierszy (powiedzmy 15 minutowe przedzialy od 7 rano do 22) i dynamicznej ilosci wierszy (wspomniana tabela "pomieszczenie")
  • nastepnie po kilkniecieu wybranej komorki (wiersz pomieszczenie, kolumna godzina rozpoczecia uslugi) ma sie otworzyc okno dialogowe (to to potrafie akurat zrobic ;) ), w ktorym wpisze takie dane jak: usluga, klient i pracownik wykonujacy). Ma mi sie to zapisac do bazy (tez sobie poradze) i naniesc graficznie na GDV - kolorujac kolejne wiersze w zaleznosci od dlugosci trwania uslugi (zapewne jakas petla for). Oczywiscie musi mi sprawdzic najpierw, czy nie "zazebi" sie z inna usluga w tym samym czasie.
  • datetimepickerem bede przeladowywal sobie grida pod kątem dni (zapewne metoda fill z parametrem, choc do konca jeszcze nie wiem, jak on to potem przelozy na grafczny wyglad (cell formating w petli for each?))

Ale na razie musze zaczac, czyli zaladowac tego grida w podany przeze mnie sposob. Reszta to bedzie chyba obsługa metody MouseCellClick :)

0
guushiddink napisał(a)

Mowisz, ze naglowki kolumn sa dosc banalne? Przy statycznej ilosci oczywiscie tak, troche gorzej, jak ilosc ma byc dynamiczna i uzalezniona od ilosci wierszy w tabeli "Stanowisko" w bazie.

wybacz ze tylko do tej czesci postu sie odnosze, ale pozno jest..

nie mam zielonego pojecia o czym mowisz:)
"przeanalizuj" prosze ten kod: http://www.danielsoper.com/programming/DataGridViewNumberedRows.aspx
to to zajmuje sie wlasnie rysowaniem numerow, niezaleznie od ilosci wierszy..

jezeli to to pomodyfikujesz, i zamiast uzywac rowindex - wezmiesz sobie ten rowindex i przeliczysz na cos innego, albo z rowindex+datagridview wyciagniesz wlasciwy zrodlowy wiersz danych, to w efekcie mozesz sobie rysowac cokolwiekcisiespodoba w dodatku kontektowo wzgledem aktualnej tresci wiersza..

0
quetzalcoatl napisał(a)

Jesli chodzi o nagłówki kolumn, to pewnie zauwazyles ze jest to dosc banalne.

Chyba nie zrozumielismy sie dokładnie. Chodzi o to, zeby nagłówkami były wiersze tabeli "Pomieszczenie". Pierwszym moim pomysłem było zastosowanie PIVOTa. I tym moglbym zakonczyc rzwiazywanie swojego problemu, gdyny nie jedna rzecz - w funkcji PIVOT musze zdeklarowac stała liczbe kolumn, a w tym przypadku jest to nierealne (nie moge zalozyc stałej niezmiennej liczby pomieszczen).

Moze postaram sie jeszcze raz po "chłopsku" wyjasnic co potrzebuje. Mianowicie musze wyrysowac tabele (uzywam WinFormsów), w której nagłówkami beda wartosci kolumny "Nazwa" z tabeli "Pomieszczenie", a nagłowkami wierszy godziny) powiedzmy od 8:00 do 22:00 co 15 minut.
Klikajac w dowolna komorke powinno mi sie otworzyc okno dialogowe, w którym bede mogl wprwadzic takie dane jak Usluga, Pracownik i Klient. Ale z tym juz sobie poradze, jak uda mi sie wyrysowac ta cholerna tabele.

To wszystko powinno byc powiązane z komponentem MonthCalendar, zebym mogl przeprowadzac zapisy na dowolny dzien.

I troche mnie to przedsiewziecie lekko zaczyna przerazac :D Jesli ktos by mnie mogl nakierowac, bylbym zobowiazany

0

Nie wiem nadal w czym problem. Nie musisz mieć przecież sztywnej liczby kolumn w DGV. Gdy pobierzesz sobie listę pomieszczeń z bazy danych, to będziesz mógł dodać tyle kolumn ile jest tych pomieszczeń.

0

To potraktujcie mnie prosze jak totalnego n00ba i powiedzcie - jak!! Jak wyswietlic wiersze jako kolumny - bo nie widze zadnej opcji Orientation, Transpose czy cos podobnego.

O dograniu wszystkiego razem potem do kupy nie wspominajac ;)

0

Nie rozumiem... Co to znaczy wyświetlić wiersze jako kolumny? Weź Ty może narysuj to co chcesz osiągnąć i tu wklej, bo chyba kompletnie się nie rozumiemy. :)

0

To sie chyba transpozycja nazywa :>

http://wgrajfoto.pl/pokaz/img0511/test4ab1.jpg

tak by to miało wygladac.

0

Pobierasz z bazy pomieszczenia i wstawiasz jako nagłówki tabeli, nie wiem w czym problem.

0

W tym problem, ze od 5 postów zadaje to samo pytanie - jak to zrobic! (tzn jak ustawic pobrane z bazy wiersze, jako naglowki tabeli)

0

Transpozycja? Gdzie?

guushiddink napisał(a)

To potraktujcie mnie prosze jak totalnego n00ba i powiedzcie - jak!! Jak wyswietlic wiersze jako kolumny - bo nie widze zadnej opcji Orientation, Transpose czy cos podobnego.

Chyba sam nie chcesz, żeby Ci pomóc. Słowo "wiersz" ma dwa znaczenia tutaj, nie precyzując jasno, o które z nich Ci chodzi tylko mieszasz. W tym zdaniu chodziło Ci o REKORDY Z BAZY, a nie wiersze, prawda?

Ty nie chcesz żadnych wierszy jako kolumny wyświetlać, cokolwiek miałoby to znaczyć. Ty musisz po prostu USTAWIĆ w DataGridView odpowiednią liczbę kolumn dynamicznie, jak już pisaliśmy. Kolumny DataGridView masz w kolekcji Columns. Możesz tam dodać nową kolumnę przy użyciu metody Add.

0

Kurcze, nie wiem jak Ci napisac, zebys zrozumial o co mi chodzi. Moze wrzuce kawałek kodu, który pomoze to objasnic

Tutaj tworze nowego grida

InitializeComponent();
            // Instantiate the grid
            ReservationDG = new DataGridView();
            // Init the grid
            ReservationDG.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            ReservationDG.Location = new System.Drawing.Point(29, 35);
            ReservationDG.Name = "ReservationDG";
            ReservationDG.Size = new System.Drawing.Size(240, 150);
            ReservationDG.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

Sprawdzam ilosc wierszy w tabeli Pomieszczenia

ReservationDG.ColumnCount = Convert.ToInt32(this.pomieszczenieTableAdapter.ScalarQuery());

Teraz moment, który mi nie działa - nie wchodzi mi w petle foreach (wzglednie moznaby to zrobic petla for, ale niezbyt wiem jak)
Tzn tworzy mi tyle kolumn, ile trzeba, ale ich nie nazywa

BetaDataSet ds = new BetaDataSet;

foreach (DataRow dr in ds.Pomieszczenie.Rows)
            {
             //   MessageBox.Show(dr["Nazwa"].ToString());
                ReservationDG.Columns[i].Name = (dr["Nazwa"].ToString());
                i++;
            }

i potem dalszy ciag kodu, ktory działa

ReservationDG.Rows.Add(4);
            ReservationDG.Rows[0].HeaderCell.Value = "08:00";
            ReservationDG.Rows[1].HeaderCell.Value = "08:30";
            ReservationDG.Rows[2].HeaderCell.Value = "09:00";
            ReservationDG.Rows[3].HeaderCell.Value = "09:30";
        }

byc moze teraz zrozumiecie, do czego dążę

EDYTA - pętla for załatwiła sprawe

 for (int i = 0; i < ReservationDG.ColumnCount; i++)
            {
                ReservationDG.Columns[i].Name = Convert.ToString(this.pomieszczenieTableAdapter.GetData().Rows[i][1]);
            }

Ide szukac dalszych problemow w projekcie ;)

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