Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc

[es] :: .NET :: WPF Programiranje :: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc

Strane: 1 2

[ Pregleda: 7151 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc18.01.2011. u 23:10 - pre 160 meseci
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 ....
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc18.01.2011. u 23:12 - pre 160 meseci
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>
 
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc18.01.2011. u 23:13 - pre 160 meseci
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
        }

    }
}
 
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc18.01.2011. u 23:17 - pre 160 meseci
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)...

 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc18.01.2011. u 23:23 - pre 160 meseci
koga zanima kako izgleda neka pogleda http://uploading.com/files/2af9d625/Diplomski.zip/
 
Odgovor na temu

stuparic
stuparic dejan
banat

Član broj: 47164
Poruke: 59
*.dynamic.isp.telekom.rs.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc18.01.2011. u 23:35 - pre 160 meseci
Sad cu pogledati,pa ti saljem neke sugestije. I ja sam skoro poceo da se bavim WPF-om...
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.
 
Odgovor na temu

stuparic
stuparic dejan
banat

Član broj: 47164
Poruke: 59
*.dynamic.isp.telekom.rs.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc19.01.2011. u 00:02 - pre 160 meseci
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
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.
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc19.01.2011. u 01:02 - pre 160 meseci
Da, uspelo je , sortirao sam po ID ... Zanimljiv interfejs ICollectionView , posluzice za jos po nesto ... ali vec mi se spava , sutra :)


Hvala !
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc19.01.2011. u 09:24 - pre 160 meseci
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 . 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%


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ć
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc19.01.2011. u 09:25 - pre 160 meseci
I btw, aplikacija bi trebalo da ti se zove "Zakazivanje ispita" ne "Prijava ispita"
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ć
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc19.01.2011. u 13:31 - pre 160 meseci
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)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc19.01.2011. u 15:56 - pre 160 meseci
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.
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ć
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc20.01.2011. u 22:20 - pre 160 meseci
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 :-)
Prikačeni fajlovi
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc20.01.2011. u 22:36 - pre 160 meseci
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

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ć
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc21.01.2011. u 00:06 - pre 160 meseci
Ok. Ali kako slike da potrpam u bazu , ajd biografije moze kao string ,ali kako slike ?! Kakav je DataType polje u bazi, i kako to da uradim?
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc21.01.2011. u 00:11 - pre 160 meseci
Attachment :) , super , sad cu malo da eksperimentisem...
 
Odgovor na temu

Dusan Kondic
Programer
ZR "Parametar" Ljubovija
Ljubovija

Član broj: 49961
Poruke: 225
*.dynamic.isp.telekom.rs.

Sajt: www.drinacoding.com


+14 Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc21.01.2011. u 09:11 - pre 160 meseci
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);
            }


[Ovu poruku je menjao Shadowed dana 21.01.2011. u 12:01 GMT+1]
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc22.01.2011. u 01:34 - pre 160 meseci
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 ... ?
Prikačeni fajlovi
 
Odgovor na temu

crnjin
Marko Milovanovic
PHP programer
Ljubovija

Član broj: 272984
Poruke: 45
*.wimax.verat.net.



Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc22.01.2011. u 01:58 - pre 160 meseci
Morao sam da obrisem neke fajlove iz bin direktorijuma ne bi trebalo da smeta, .exe i neka extenzija na o :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc22.01.2011. u 10:07 - pre 160 meseci
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.
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ć
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: Diplomski WPF - Aplikacija za zakazivanje ispita - pomoc

Strane: 1 2

[ Pregleda: 7151 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.