Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc

WPF
  • 24 odgovora
  • 10.188 pregleda

Najnovija ↓

Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 00:10 · pre 192 meseca #1
Ovako ... Uzeo sam da radim diplomski u WPF-u .
Video sam da WPF aplikacije dobro izgledaju graficki i voleo bih da iskoristim sve prednosti WPF-a , a naravno da izbegnem mane...
Molim za kritike , predloge i pomoc naravno ... Postavicu XAML i .cs kod ....
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 00:12 · pre 192 meseca #2
Code (xml):

<Window x:Class="Diplomski.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       
       Title="Aplikacija za prijavu ispita - VISER 2010" Height="700" Width="1000"  Background="AliceBlue" Loaded="Window_Loaded">
    <Window.Resources>
       
    </Window.Resources>
   
    <DockPanel>
        <StackPanel DockPanel.Dock="Top">
            <Image Source="D:\Projects\VisualStudioProjects\Diplomski\slike\logo.jpg" Stretch="Fill"></Image>
        </StackPanel>
        <StackPanel Orientation="Horizontal" x:Name="GlavniStackPanel">
            <StackPanel>
                <Image x:Name="prof_slika" Height="110" Width="110" Margin="5" Source="{Binding Image}" Stretch="Fill"></Image>
                <TextBlock Margin="5" Text="{Binding Biografija}"></TextBlock>
            </StackPanel>
            <StackPanel HorizontalAlignment="Center">

                <WrapPanel>
                    <Label Margin="2" Name="lblProf" Width="150">Profesor</Label>
                    <Label Margin="2" Name="lblRok" Width="120">Ispitni rok</Label>
                    <Label Margin="2" Name="lblIspit" Width="300">Ispit</Label>
                    <Label Margin="2" Name="lblProstorija" Width="120">Prostorija</Label>
                </WrapPanel>
                <WrapPanel>
                    <ComboBox Margin="2" Height="23" Width="150" Name="comboBoxProfesor" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" SelectedValuePath="ID" >
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <!--<Image Source="{Binding Image}" Margin="3" Height="45"></Image>-->
                                    <StackPanel Orientation="Vertical">
                                        <TextBlock Text="{Binding Ime}"></TextBlock>
                                        <!--<TextBlock Text="{Binding ID}"></TextBlock>-->
                                    </StackPanel>
                                </StackPanel>
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>
                    <ComboBox Margin="2" Height="23" Name="comboBoxRok" Width="120" />
                    <ComboBox Margin="2" Height="23" Name="comboBoxIspit" Width="300" />
                    <ComboBox Margin="2" Height="23" Width="120" x:Name="comboBoxProstorija" ItemsSource="{Binding}">
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding Check}" Content="{Binding Naziv}" ></CheckBox>
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>
                </WrapPanel>

                <Label Height="10" Name="lblRazmak1" Width="120"></Label>
                <WrapPanel>
                    <Label Name="lblDatum" Width="194">Datum</Label>
                    <Label Name="lblVreme" Width="120">Vreme</Label>
                </WrapPanel>
                <WrapPanel>
                    <Calendar Name="calendar"></Calendar>
                    <TextBox VerticalAlignment="Top" Margin="10 2 1 2" Height="23" Name="txtVreme" Width="50" />
                    <Label>:</Label>
                    <TextBox VerticalAlignment="Top" Margin="1 2 2 2" Height="23" Name="txtVreme1" Width="50" />
                    <Button  Margin="5" Height="30" Name="btnZakazi" Width="90" Click="btnZakazi_Click">Zakazi</Button>
                    <StackPanel Orientation="Vertical">
                        <StackPanel Orientation="Horizontal">
                            <Label Name="l0">0</Label>
                            <Label Name="l1" Margin="1 0 0 0">1</Label>
                            <Label Name="l2" Margin="1 0 0 0">2</Label>
                            <Label Name="l3" Margin="1 0 0 0">3</Label>
                            <Label Name="l4" Margin="1 0 0 0">4</Label>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Rectangle Height="20" Name="rectangle1" Fill="Green" Width="120"  />
                            <Rectangle Height="20" Name="rectangle2" Fill="Red" Width="40"  />
                            <Rectangle Height="20" Name="rectangle3" Fill="Green" Width="80"  />
                        </StackPanel>
                    </StackPanel>
                   
                </WrapPanel>

                <DataGrid Name="dataGrid1" Height="200" Margin="5" SelectionMode="Single" ItemsSource="{Binding}" AutoGenerateColumns="False" >
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="ID" Binding="{Binding Path=ID}" />
                        <DataGridTextColumn Header="Profesor" Binding="{Binding Path=Profesor}" />
                        <DataGridTextColumn Header="Sifra Ispita" Binding="{Binding Path=SifraIspita}" />
                        <DataGridTextColumn Header="Naziv Ispita" Binding="{Binding Path=NazivIspita}" />
                        <DataGridTextColumn Header="Prostorija" Binding="{Binding Path=Prostorija}" />
                        <DataGridTextColumn Header="Rok" Binding="{Binding Path=Rok}" />
                        <DataGridTextColumn Header="Datum" Binding="{Binding Path=Datum}" />
                        <DataGridTextColumn Header="Vreme" Binding="{Binding Path=Vreme}" />
                    </DataGrid.Columns>
                </DataGrid>
                <WrapPanel>
                    <Button HorizontalAlignment="Right" Height="30" Name="btnIzvezi" Width="90" Click="btnIzvezi_Click">Izvezi u Excel</Button>
                    <Button HorizontalAlignment="Right" Margin="5" Height="30" Name="btnBrisanje" Width="90" Click="btnBrisanje_Click">Brisanje</Button>
                </WrapPanel>
            </StackPanel>
        </StackPanel>
       

    </DockPanel>

</Window>
 
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 00:13 · pre 192 meseca #3
Code (csharp):

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using System.IO;
using System.Diagnostics;

namespace Diplomski
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class
        MainWindow : Window
    {
        FileStream fs; StreamReader sr; string tekst = "";
        List<Profesor> profesori = new List<Profesor>();
        List<Prostorija> prostorije = new List<Prostorija>();
       
        DataSet1TableAdapters.ProfesoriTableAdapter taP;
        DataSet1TableAdapters.RokoviTableAdapter taR;
        DataSet1TableAdapters.IspitiTableAdapter taI;
        DataSet1TableAdapters.ProstorijaTableAdapter taProstorija;
        DataSet1TableAdapters.ZakazaniTableAdapter taZ;
        public MainWindow()
        {
            InitializeComponent();
            taP = new Diplomski.DataSet1TableAdapters.ProfesoriTableAdapter();
            taR = new Diplomski.DataSet1TableAdapters.RokoviTableAdapter();
            taProstorija = new Diplomski.DataSet1TableAdapters.ProstorijaTableAdapter();
            taI = new Diplomski.DataSet1TableAdapters.IspitiTableAdapter();
            taZ = new Diplomski.DataSet1TableAdapters.ZakazaniTableAdapter();

           
                //fs = new FileStream("Zoran Banjac.txt", FileMode.Open, FileAccess.Read);
                //sr = new StreamReader(fs);
                //while (!sr.EndOfStream)
                //    tekst += sr.ReadLine();
                //sr.Close();
           
           
        }

        public class Profesor
        {
            private string ime,image,biografija;
            private int id;

            public Profesor(int Id, string Ime, string Image,string Biografija)
            {
                id = Id; ime = Ime; image = Image; biografija = Biografija;
            }

            public string Ime
            {
                get { return ime; }
                set { ime = value; }
            }

            public string Image
            {
                get { return image; }
                set { image = value; }
            }

            public string Biografija
            {
                get { return biografija; }
                set { biografija = value; }
            }

            public int ID
            {
                get { return id; }
                set { id = value; }
            }
        }

        public class Prostorija
        {
            private int id, kapacitet;
            private string naziv;
            private bool check;

            public Prostorija(int Id, int Kap, bool Check, string Naziv)
            {
                id = Id; kapacitet = Kap; check = Check; naziv = Naziv;
            }
            public int ID
            {
                get { return id; }
                set { id = value; }
            }
            public int Kapacitet
            {
                get { return kapacitet; }
                set { kapacitet = value; }
            }
            public bool Check
            {
                get { return check; }
                set { check = value; }
            }
            public string Naziv
            {
                get { return naziv; }
                set { naziv = value; }
            }
        }

        public void ucitaj_DataGrid()
        {
            DataSet1.RokoviDataTable dtR = taR.GetData();
            DataSet1.ProfesoriDataTable dtP = taP.GetData();
            DataSet1.IspitiDataTable dtI = taI.GetData();
            DataSet1.ProstorijaDataTable dtProstorija = taProstorija.GetData();
            DataSet1.ZakazaniDataTable dtZ = taZ.GetData();

            DataTable dtZakazani = new DataTable();
            dtZakazani.Columns.Add("ID", typeof(int));
            dtZakazani.Columns.Add("Profesor", typeof(string));
            dtZakazani.Columns.Add("SifraIspita", typeof(string));
            dtZakazani.Columns.Add("NazivIspita", typeof(string));
            dtZakazani.Columns.Add("Prostorija", typeof(string));
            dtZakazani.Columns.Add("Rok", typeof(string));
            dtZakazani.Columns.Add("Datum", typeof(string));
            dtZakazani.Columns.Add("Vreme", typeof(string));

            string profDG = "", sifraIspitaDG = "", nazivIspitaDG = "", prostorijaDG = "";

            bool pom = false, pom1 = false; int j = 0, i = 0;
            int[] niz = new int[4 * dtZ.Rows.Count];

            foreach (DataSet1.ZakazaniRow r in dtZ.Rows)
            {
                pom1 = false;
                foreach (int br in niz) { if (br.Equals(r.ID)) pom1 = true; } i++;
                if (pom1) continue;

                foreach (DataSet1.ProfesoriRow rp in dtP.Rows)
                {
                    if (r.id_prof.Equals(rp.ID))
                        profDG += " " + rp.Ime + " " + rp.Prezime + " ";
                }
                foreach (DataSet1.IspitiRow ri in dtI.Rows)
                {
                    if (r.id_ispita.Equals(ri.ID))
                    { sifraIspitaDG = " " + ri.Sifra + " "; nazivIspitaDG = " " + ri.Naziv + " "; }
                }
                foreach (DataSet1.ProstorijaRow rp in dtProstorija.Rows)
                {
                    if (r.id_prostorije.Equals(rp.ID))
                        prostorijaDG += " " + rp.Naziv + " ";
                }

                foreach (DataSet1.ZakazaniRow rr in dtZ.Rows)
                {

                    if (j == 0) { j++; continue; }


                    if (r.id_prof.Equals(rr.id_prof) && r.id_ispita.Equals(rr.id_ispita) && !r.id_prostorije.Equals(rr.id_prostorije)
                    && r.Rok.Equals(rr.Rok) && r.Datum.Equals(rr.Datum) && r.Vreme.Equals(rr.Vreme) && !r.ID.Equals(rr.ID))
                        pom = true;
                    else
                        pom = false;

                    if (pom)
                    {
                        foreach (DataSet1.ProstorijaRow rp in dtProstorija.Rows)
                        {
                            if (rr.id_prostorije.Equals(rp.ID))
                                prostorijaDG += " , " + rp.Naziv;
                        }
                        niz[i++] = rr.ID;
                    }
                }
                dtZakazani.Rows.Add(r.ID, profDG, sifraIspitaDG, nazivIspitaDG, prostorijaDG, r.Rok, r.Datum.Day+"."+r.Datum.Month+"."+r.Datum.Year+".", r.Vreme);
                profDG = ""; sifraIspitaDG = ""; nazivIspitaDG = ""; prostorijaDG = "";
            }
            dataGrid1.DataContext = dtZakazani;
        }
       
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //MessageBox.Show(tekst);
            DataSet1.RokoviDataTable dtR = taR.GetData();
            DataSet1.ProfesoriDataTable dtP = taP.GetData();
            DataSet1.IspitiDataTable dtI = taI.GetData();
            DataSet1.ProstorijaDataTable dtProstorija = taProstorija.GetData();

            //***************************************************** Binding za comboBoxProfesor
            profesori.Add(new Profesor(0, "" , "", ""));

            foreach (DataSet1.ProfesoriRow r in dtP.Rows)
            {
                //string tekst = "";
                //fs = new FileStream(r.Ime + " " + r.Prezime + ".txt", FileMode.Open, FileAccess.Read);
                //sr = new StreamReader(fs);
                //while (!sr.EndOfStream)
                //    tekst = sr.ReadLine();
                //MessageBox.Show(tekst);
                profesori.Add(new Profesor(r.ID, r.Ime + " " + r.Prezime, r.Ime + " " + r.Prezime + ".jpg", ""));
               
            }
            this.GlavniStackPanel.DataContext = profesori;

            ucitaj_DataGrid();
            //********************************************************** Binding za comboBoxIspit
            string ime = "";
            DataTable dtPomIspit = new DataTable();
            dtPomIspit.Columns.Add("ID", typeof(int));
            dtPomIspit.Columns.Add("Ime", typeof(string));
            foreach (DataSet1.IspitiRow r in dtI.Rows)
            {
                ime += r.Sifra + " " + r.Naziv;
                dtPomIspit.Rows.Add(r.ID, ime);
                ime = "";
            }
            Binding b = new Binding() { Source = dtPomIspit };
            this.comboBoxIspit.SetBinding(ComboBox.ItemsSourceProperty, b);
            this.comboBoxIspit.DisplayMemberPath = "Ime";
            this.comboBoxIspit.SelectedValuePath = "ID";
            //****************************************************************** Binding za comboBoxProstorija
            //b = new Binding() { Source = dtProstorija };
            //this.comboBoxProstorija.SetBinding(ComboBox.ItemsSourceProperty, b);
            //this.comboBoxProstorija.DisplayMemberPath = "Naziv";
            //this.comboBoxProstorija.SelectedValuePath = "ID";
            foreach (DataSet1.ProstorijaRow r in dtProstorija.Rows)
            {
                prostorije.Add(new Prostorija(r.ID, r.Kapacitet, false, r.Naziv));
            }
            this.comboBoxProstorija.DataContext = prostorije;
            //*********************************************************************************** puni comboBoxRok
            foreach (DataSet1.RokoviRow r in dtR.Rows)
            {
                comboBoxRok.Items.Add(r.ID);
            }

        }

       
        private void btnZakazi_Click(object sender, RoutedEventArgs e)
        {

            double sat = 0, min = 0;
            DateTime n = new DateTime();
            sat = double.Parse(txtVreme.Text);
            min = double.Parse(txtVreme1.Text);
            // = sat;
            n = n.AddHours(sat);
            n = n.AddMinutes(min);
            MessageBox.Show("" + n.ToShortTimeString());

            try
            {
                bool prostorUnet = false;
                foreach (Prostorija p in prostorije)
                {
                    if (p.Check)
                    {
                        taZ.Insert(int.Parse(comboBoxProfesor.SelectedValue.ToString()),
                               int.Parse(comboBoxIspit.SelectedValue.ToString()),
                               p.ID,
                               comboBoxRok.SelectedItem.ToString(),
                               calendar.DisplayDate, txtVreme.Text);
                        prostorUnet = true;
                    }

                }
                if (prostorUnet)
                        MessageBox.Show("Ispit zakazan !");
                else
                    MessageBox.Show("Niste izabrali sve podatke !");
            }
            catch
            {
                MessageBox.Show("Nije uspelo!");
            }
            ucitaj_DataGrid();
        }

        private void btnIzvezi_Click(object sender, RoutedEventArgs e)
        {
            dataGrid1.SelectionMode = DataGridSelectionMode.Extended;
            dataGrid1.SelectAllCells();
            dataGrid1.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(null, dataGrid1);
            string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Raspored_Ispita.csv";
            string dataExp = Clipboard.GetData(DataFormats.CommaSeparatedValue) as string;
            File.WriteAllText(docPath, dataExp);
            if (MessageBox.Show("Podaci sacuvani u Documents/Raspored_Ispita.csv . Da li zelite da otvorite taj fajl ?", "Podaci sacuvani u Excel dokumentu", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                Process.Start(docPath);
               
            }
           
            dataGrid1.UnselectAllCells();
        }


        private void btnBrisanje_Click(object sender, RoutedEventArgs e)
        {

            object selected = dataGrid1.SelectedItem;
            DataSet1.ZakazaniDataTable dtZ = taZ.GetData();
            try
            {
                DataRow row = ((DataRowView)selected).Row;
                int pomId = 0, pomId_prof = 0, pomId_ispit = 0, pomId_Prostor = 0;
                string pomRok = "", pomVreme = ""; DateTime pomDatum = DateTime.Today;
                foreach (DataSet1.ZakazaniRow r in dtZ.Rows)
                {
                    if (!pomId.Equals(r.ID) && pomId_prof.Equals(r.id_prof) && pomId_ispit.Equals(r.id_ispita) &&
                        !pomId_Prostor.Equals(r.id_prostorije) && pomRok.Equals(r.Rok) && pomDatum.Equals(r.Datum) &&
                        pomVreme.Equals(r.Vreme))
                    { taZ.Delete(r.ID, r.id_prof, r.id_ispita, r.id_prostorije, r.Rok, r.Datum, r.Vreme); }

                    pomId = r.ID; pomId_prof = r.id_prof; pomId_ispit = r.id_ispita; pomId_Prostor = r.id_prostorije;
                    pomRok = r.Rok; pomDatum = r.Datum; pomVreme = r.Vreme;

                    if (r.ID.Equals(row[0]))
                        if (MessageBox.Show("Da li ste sigurni da zelite da obrisete izabrani ispit ?", " ", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                        { taZ.Delete(r.ID, r.id_prof, r.id_ispita, r.id_prostorije, r.Rok, r.Datum, r.Vreme); }
                }
            }
            catch
            {
                MessageBox.Show("Morate prvo izabrati jedan ispit (red u tabeli) !");
            }
            ucitaj_DataGrid(); // nejasno zasto taZ.Delete(... trazi ovoliko argumenata a ne samo ID
        }

    }
}
 
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 00:17 · pre 192 meseca #4
Izgleda nepregledno ali nadam se da ce vredeti ...

Sada pitanje :

Kako sortirati DataGrid po nekom kriterijumu (koloni) ? Konkretno dataGrid1 po ID ?
Treba da kada dodam novi ispit, i refresujem prikaz u dataGrid1 , on bude na kraju , zato sto ce imati najveci ID (AutoNumber u bazi podataka)...

Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 00:35 · pre 192 meseca #6
Sad cu pogledati,pa ti saljem neke sugestije. I ja sam skoro poceo da se bavim WPF-om...
Potpis
What if the prophecy is true?
What if tomorrow the war could be over?
Isn't that worth fighting for?
Isn't that worth dying for?

Morpheus.
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 01:02 · pre 192 meseca #7
Fino izgleda, na prvi pogled, nisam se preterano udubljavao.

A sto se tice tvog problema, mozda ti ovo pomogne http://wpf.codeplex.com/Thread/View.aspx?ThreadId=46939
Potpis
What if the prophecy is true?
What if tomorrow the war could be over?
Isn't that worth fighting for?
Isn't that worth dying for?

Morpheus.
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 02:02 · pre 192 meseca #8
Da, uspelo je , sortirao sam po ID ... Zanimljiv interfejs ICollectionView , posluzice za jos po nesto ... ali vec mi se spava , sutra :)


Hvala !
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 10:24 · pre 192 meseca #9
Ok, neke primedbe i dobronamerne kritike

MODEL
- za pocetak nemoj koristiti access 2007+, nemaju svi provajdera za to (ja nisam imao) niti je on preporucen za male desktop aplikacije. Bazu kreiraj u SDF formatu (Add New Item | Local Database). Access je i zvanicno razveden od desktop aplikacija :)

- Fali ti veza izmedju profesora i ispita, mozda je to van opsega tvog diplomskog ali u realnim uslovima tvoj model bi dozvolio npr kreiranje polaganja Matematike 1 kod Cirkovica koji predaje softverske predmete.

- Treba (bar za akademski projekat) da gadjas koser 3NF (treca normalna forma) za model baze, bar po meni. Pored toga sto je to dobra praksa da prepoznas greske i potencijalne probleme u modelu daje ti i opciju da iskucas malo teksta o tome u radu ;) fillera nikad dosta narocito u Srbiji gde se akademski radovi vrednuju po kilazi. Ti si bio dobro poceo sa cepanjem glavne Zakazani tabele na 3NF ali si u nekom trenutku stao. Kad to kazem mislim na sledece:
- prostrije nisu 3NF ako su imena soba jedinstvena, onda imaju dva kandidata za kljuc (ID i ime prostorije) i otvaraju prostor za logicku gresku (dve razlicite sobe koje se zovu isto). Kao sto si radio sa rokom, radi i ovde, ime prostorije je unique iskoristi ga kao kljuc
- isto vazi i za Ispit (ID i Sifra), sifra je ocigledno jedinstvena, iskoristi nju.
- da se razumemo, u realnom zivotu neces biti ekstremista i drzati se 3NF kao pijan plota, niti ces vuci string kljuceve kao FK zbog drugih razloga. U svakom slucaju konsultuj se sa mentorom, dal da uradis skolski ili inzenjerski.

- Iskreno mi se ne svidja kako koristis datasetove :D. Ok, izabrao si datasetove (ja ne bih za ovaj app, linq2sql je ovde idealan) i to je u redu, ali onda ih koristi kako treba :). Najvise bode oci to sto koristis kod da transformises podatke (npr Profesori) i onda mesas typed dataset i POCO model i potpuno bacas u vodu sve benefite koriscenja dataseta :), i onda na sve to jos i nabacis jednu netipiziranu data tabelu :).

Umesto toga fokusiraj se na jedno. Za pocetak iskoristi transformaciju na nivou SQLa. Nigde ne pise da tvoja tabela u datasetu mora da bude 1-1 sema kao u bazi, narocito ako je u pitanju samo lookup tabela. Dakle izbaci tabelu profesori iz dataset-a
1) Na dataset-u uradi rclick i "Add Table Adapter"
2) Izaberi SQL Query
3) Ubaci sledeci Query: SELECT ID, Ime + ' ' + Prezime AS Profesor, Kancelarija, email FROM Profesori i Next/Finish i imaces novu transformisanu tableu u datasetu i uopste to ne treba Profesor POCO tip ni transformacija
- Ako si uradio 3NF za prostoriju ti vise ni ne treba transformacija
- Vidim isto da koristis POCO klase da bi dodao nova "polja" u model. TO mozes i direktno da uradis u typed datatable kroz parzijalnu klasu. doubleclick tabelu i kad ti otvori sors napravis sledece

Code (csharp):

    public partial class DataSet1 {
        partial class ProstorijaDataTable
        {
            public bool Check { get; set; }
        }
    }
 

i voila, imas novo polje koje nije vezano za bazu a vidljivo je kroz interfejs tabele.


Nemoj koristiti untyped dataset elemente. Nije ni lepo a ni korisno a vec ionako IMAS model tabele za grid.
Kreiraj jedan dataset instance na formi oji ce ti biti centrani drzac za podatke, iz njega posle mozes da bindujes DIREKTNO kroz {Binding ...} na formi i mozes komotno da izbacis tonu kod kojom rucno pravis binding iz code-behind-a


WPF
Nemoj koristiti foreach nad dataset tabelama da rucno bildujes dropdown iteme. Sve datasets tabele su iterativne i mogu se bindovati direktno
Nemas nikakvu validaciju

Toliko za sada, moram da palim :) Ispravi ovo za pocetak pa cemo dalje.



U svakom slucaju mislim da se tvoj codebehind moze skresati za bar 50%

Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Sviđa mi se1
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 10:25 · pre 192 meseca #10
I btw, aplikacija bi trebalo da ti se zove "Zakazivanje ispita" ne "Prijava ispita"
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 14:31 · pre 192 meseca #11
Ok , ovo za bazu sto si napisao vec sam planirao da ispravim (veza izmedju profesora i ispita, 3NF ...)
Sto se DataSet-ova tice, koristim ih jer jedino tako zanam da povezem bazu i aplikaciju, iako sam video 50% problema na koji si ukazao.
Moj mentor se ne buni , dao mi je puno slobode , sto je ponekad kontraproduktivno.
linq2sql nisam koristio pa ako ti nije problem stavi neki link o linq2sql , neki primer povezivanja sa bazom ,ja cu do tad probati nesto da izgooglam...

I jos , baza u SDF formatu ? Nju kreiram isto u Access-u ili SQL server (njega nemam)... ??

Izvini ako postavljam glupa pitanja, uzeo sam diplomski u WPF a nisam imao pojma ni sta je to, nismo ga radili ni na vezama,
tako da imam samo znanje sa vezbi C#, WCF(Integracija softverskih tehnologija tako s zvao predmet)
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 19.01.2011. u 16:56 · pre 192 meseca #12
sdf kreiras direktno iz visual studia (rclick na projekat | Add | New Item | Local Database), wizard ce ti odmah i napraviti prazan dataset u koji da bacas tabele koje napravis. Sama baza ce tio biti vidljiva is database explorera.

ne treba ti ni access ni SQL server za sdf (u tome je njegova car ;)), sav runtime za ovu bazu je vec ukljucen u framework. sdf ima neka svoja ogranicenja, ali za tvoje promene (single user storage plus osnovne relacije) je odlican.


Sto se tice linq2sql, nije frka, imas dosta na netu pocev od Scottovog tutoriala (http://weblogs.asp.net/scottgu.../using-linq-to-sql-part-1.aspx), ali ne moras sada sebi da komplikujes, sa datasetovima si radio, nista im ne fali.

Sto se tice WPFa, ne brini, doci cemo i na to :) Sad zasad da sredimo pozadinu. Kad odradis ovo sto treba, okaci ponovo projekat pa da vidimo sta dalje. Ne moras da kacis source u poruci i da koristis download sajtove, slobodno spakuj projekat u zip i zakaci zip za poruku ovde.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 20.01.2011. u 23:20 · pre 192 meseca #13
Evo promenio sam bazu (Access sutra cu probati to u SDF da pretocim) ...

Ali nisam zadovoljan, kada tamo direktno u Access-u unosim vrednosti u tabele dopusta mi da bilo koji ispit zakazem kod bilo kog profesora...???
Posto sam u tabelu ispiti dodao i kolonu id_prof to mi je omogucilo da u kodu to lepo uradim i da u comboBoxu sa ispitima budu samo oni koje predaje "doticni" profesor , ali mislim da to nije to.
Takodje sam provalio da mi u tabeli Zakazani ne trebaju i kolona Datum i kolona Vreme , nego to sve mogu da pamtim u jednoj DateTime koloni.

Pored toga pittanje, zasto mi ovaj deo koda(koji je izkomentarisan) sa FileStream-om i StreamReader-om ne radi .
Ideja je bila da iz txt fajlova citam biografiju profesora i da se ona nekako prikazuje ispod njegove slike kad ga izaberem u combobox-u.
Tako se radilo u windowsForms a ovde nesto se buni...

I ... ovo uzimanje vremena iz dva textbox-a mi se bas i ne svidja, ali bilo bi ok, ako bi pored njih imao one strelice kao u kalendaru samo gore/dole i ako bi pored toga napravio neku validaciju textboxova. Ajd validaciju malo sam gledo po netu , verovatno bih znao uraditi ali ove strelice , jesu to popup kontrole ili button-i ili ... nije neki problem ali voleo bih da cujem neki predlog...

Sutra idem do mentora pa cu cuti i njegovo misljenje ...

Do tad pozz :-)
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 20.01.2011. u 23:36 · pre 192 meseca #14
Tehnicki, taj link sa prof_id nije dobar. Realni odnos izmedju profesora i ispita je M2M (many-to-many, u prevodu jedan profesor moze drzati vise ispita i isti ispit moze drzati vise profeosra) sto znaci da ti treba da imas medju tabelu koja ih povezuje.

Sto se tice biografija, sto ne potrpas to u bazu? I slike mozes isto, time resavas problem sa disk I/O i zaturenim fajlovima

Za time entru evo zgodne WPF kontrole za time entry: http://jobijoy.blogspot.com/2007/10/time-picker-user-control.html
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 21.01.2011. u 10:11 · pre 192 meseca
izmenjeno 1 put, poslednji put Shadowed 21.01.2011. u 12:01
  1. Shadowed21.01.2011. u 12:01zapis iz teksta poruke
#17
Ja sam se dugo mučio sa upisom/iščitavanjem fotografija zaposlenih u/iz baze
(DataType image) jer mi je to nekad radilo, a nekad nije, iz nepoznatih razloga.
Posle desetak dana sam odustao i fotografije stavio u jedan direktorijum, a u
bazu upisao njihove putanje.
Na taj način sam smanjio i veličinu baze.
Izbor i prikaz fotografije ...
Code:

            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.Title = "Izbor fotografije";
            dlg.DefaultExt = ".jpg";
            dlg.Filter = "JPEG (*.jpg)|*.jpg";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                FotoPutanja = dlg.FileName;
                Stream FileOpenStream;
                Byte[] ByteArray;
                BitmapImage mojaFotografija = new BitmapImage();
                mojaFotografija.BeginInit();
                mojaFotografija.UriSource = new Uri(FotoPutanja);
                FileOpenStream = dlg.OpenFile();
                using (BinaryReader br = new BinaryReader(FileOpenStream))
                {
                    ByteArray = br.ReadBytes(Convert.ToInt32(FileOpenStream.Length));
                }
                mojaFotografija.StreamSource = new System.IO.MemoryStream(ByteArray);
                mojaFotografija.DecodePixelWidth = 100;
                mojaFotografija.EndInit();
                //imgFoto.Source = mojaFotografija;
                ImageSource imgsrc = (ImageSource)CreateResizedImage((ImageSource)mojaFotografija, 90, 130);
                imgFoto.Source = imgsrc;
                //binSlika = BufferFromImage(mojaFotografija);
            }
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 22.01.2011. u 02:34 · pre 192 meseca #18
Dusane ovo deluje ok , iskreno nisam jos pokusao da upotrebim ovaj kod ali probacu .
Danas sam bio zaokupljen nekim drugim stvarima, nasao sam nesto zanimljivo na ovom linku
http://www.longhorncorner.com/...2008000036AM/WPFRectangle.aspx

Moglo bi da mi koristi da dinamicki iscrtavam pravugaonike na nekom Canvas-u i tako graficki predstavim vreme kad je neka prostorija zauzeta a kad ne.
Zeleni pravugaonik - slobodna , crveni - zauzeta , 24 pravugaonika za 24 sata , kao neki grafikon ... nesto tako...

Uradio sam sve isto kao na ovom linku ali nece da mi doda pravugaonik na Canvas???
XAML :
<Canvas x:Name="canvas" Grid.Column="1" Grid.Row="0" Height="200" Width="200" Background="Gray"></Canvas>

.cs :

private void DrawRectangle()
{
Rectangle kv = new Rectangle();
SolidColorBrush red = new SolidColorBrush(Colors.Red);
kv.Fill = red;
kv.Height = 150; kv.Height = 150;
canvas.Children.Insert(0, kv);
}
private void calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
DrawRectangle();
}
}
}

Ako neko vidi gde gresim neka javi, kacim ceo projekat kao attach...

Jos nesto probao sam biografiju profesora da stavim u bazu kao text polje, ali ne moze jer je text predugacak moze samo 255 karaktera? Onda da li da popravljam nekako ove izkomentarisane fajl strimove ili da to resim nekako drugacije ... ?
Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc 22.01.2011. u 11:07 · pre 192 meseca #20
Jos nisi presao na sdf? u sdf=u imas nvarchar polje u koje mozes da strpas cv profesora.

mani se za sada vizuelnih zezancija, mnogo togo sto ti sad petljas kroz kod moze lepo da se resi raznim bindinzima na samom XAMLu. Zavrsi prvo model.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme