C# - Problemi i rješenja izdvojena tema

poruka: 2.151
|
čitano: 704.330
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
offline
Re: C# - Problemi i rješenja
betmen kaže...

Upravo sam u program dodao opciju spremanja svih podataka u txt file, tako da se zapišu na sljedeći način:

 

(primjer je isti kao i u mom prošlom postu)

Popravak PC-a # 300 / Zamijeni grafu # 200 & Zamijeni RAM # 100

 

I onda pri čitanju fajla program razlomi ovu liniju metodom Split() i pretvori u odgovarajuće varijable:

 

Ime zadatka: Popravak PC-a

Cijena: 300

Što treba napraviti: Zamijeni grafu (200kn), Zamijeni RAM (100kn)

 

 

Moja pitanja:

- Je li ovo ok način za jednostavno spremanje podataka ili ima neki bolji? Jer ovaj mi se iskreno čini primitivan.

- Koju putanju staviti? Ja bi stavio nešto tipa C:/vjezba/savefile.txt jer se sad program izvršava samo na mom PC-u pa je svejedno, ali kako namjestiti da fajlovi koje program stvara budu u folderu u kojem je program instaliran?

 

Unaprijed hvala :)

Ovo ti je uzasan nacin spremanja podataka. Procitaj malo o serijalizaciji ako vec moras u file. Inace, preporucio bih ti SQLite bazu podataka.

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
16 godina
neaktivan
offline
C# - Problemi i rješenja

Sinoć sam saznao za spremanje u binarne datoteke, što je puno lakši način, ali proguglat ću i ove pojmove, hvala.

 
0 0 hvala 0
17 godina
offline
Re: C# - Problemi i rješenja
betmen kaže...

Sinoć sam saznao za spremanje u binarne datoteke, što je puno lakši način, ali proguglat ću i ove pojmove, hvala.

To je serijalizacija. Dakle ti nekakvu listu

List Artikli<Artikl>

serijaliziras u binarnu datoteku.

 

Iako ti to rijesenje nije najveselije, jer za pristupit nekom clanu liste moras ucitat cijeli file u memoriju i onda trazit po listi a to je glupo. Pogledaj SQLLite bazu.

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
17 godina
offline
C# - Problemi i rješenja

Baš to što tražiš meni radi.

 

1. stvorio sam dvije forme u jednom projektu, i dvije klase (slika1)

2. u formi 1 sam stvorio jedan textbox koji preko buttona unosi broj u klasu UnosBroj1 koju instanciram u toj formi

3. pritiskom na taj button otvara se i druga forma koju instanciram preopterećenim konstruktorom da bi instancu forme 1 prenio u formu 2

4. u formi 2 instanciram klasu UnosBroj2 i unosim preko textboxa int vrijednost pritiskom na button unesi

5. sada pozivam metod Prijenos koji je metod forme 1, a preko njega prenosim instancu klase UnosBroj2 u formu 1, i zatvaram formu 2

6. sada u formi 1 imamo instance obje klase, i onu koja je instancirana u formi 1 i onu koja je instancirana u formi 2

7. klikom, na button rezultat u formi 1 zbojimo int propertiese koje smo inicijalizirali jedan u formi 1, a drugi u formi 2, i rezultat prikažemo u labelu forme 1

 

 

namespace Broj
{
    public partial class Form1 : Form
    {
        UnosBroj1 broj1 = new UnosBroj1();
        UnosBroj2 broj2 = null;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            broj1.Val = int.Parse(textBox1.Text);
            Form2 form2 = new Form2(this);
            form2.Show();
        }
        public void Prijenos(UnosBroj2 instancaIzKlaseForm2)
        {
            broj2 = instancaIzKlaseForm2;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int zbroj = broj1.Val + broj2.Val;
            label1.Text = zbroj.ToString();

        }
    }
}

 

 

namespace Broj
{
    public partial class Form2 : Form
    {
        Form1 form1 = null;
        UnosBroj2 broj2 = new UnosBroj2();
        public Form2()
        {
            InitializeComponent();
        }
        public Form2(Form1 form1)
        {
            InitializeComponent();
            this.form1 = form1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            broj2.Val = int.Parse(textBox1.Text);
            form1.Prijenos(broj2);
            this.Close();
        }
    }
}

 

 

namespace Broj
{
    class UnosBroj1
    {
        public int Val { get; set; }
    }
}

 

 

namespace Broj
{
    public class UnosBroj2
    {
        public int Val { get; set; }
    }
}

 

 

A za sve ostale varijacije ovog koda princip bi trebao biti isti, klasa npr. Form1 je ista kao i svaka druga nestatićka klasa, čim barataš sa varijablom koja referencira na njenu istancu, njom kontroliraš javne članove te klase.

 

 

 

 

 

 

 

 

 

 

slika1 slika1
Poruka je uređivana zadnji put uto 24.7.2012 14:33 (Floki).
 
0 0 hvala 2
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja
betmen kaže...

Sinoć sam saznao za spremanje u binarne datoteke, što je puno lakši način, ali proguglat ću i ove pojmove, hvala.

Pogledaj ovo što ti tankir govori. SQLLite je super za takve potrebe. Nema servera, samo includeaš .dll u projekt i gotovo.

16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Opet ne štima.

 

Imam ovo: form1, form2 i klasa.

 

Iz form1 pokrećem form2 bez prenošenja ikakvih vrijednosti. U form2 iz grida izabirem podatak i spremam ga u klasu (koja je instancirana u form2). Form2 se zatvara i sad bi mi trebao taj podatak iz klase u form1 (bez instanciranja nove form1 jer ona sadrži neke druge podatke nevezane za form2 i klasu).

 

Jel ovo dobro rješenje - klasu instancirati u form1, prenesti ju u form2, popuniti je tamo, zatvoriti form2 i popuniti txtbox u form1 sa podacima iz klase?

 

[edit] - konkretni primjer. U glavnom izborniku (form1) otvaram popis kupaca (form2). U popisu odabirem kupca, zatvaram formu i sad bi taj kupac morao biti u form1 (tj. gl. izborniku) za daljnju uporabu - ispis ponude i sl.

http://nighthawk-software.blogspot.com/
Poruka je uređivana zadnji put sri 25.7.2012 15:56 (Sum_of_all_fears).
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Da su web forme, to bih prenio kroz sesiju ili query string, no za Win forme čekaj Flokija. {#}

17 godina
offline
Re: C# - Problemi i rješenja
Sum_of_all_fears kaže...

Opet ne štima.

 

Imam ovo: form1, form2 i klasa.

 

Iz form1 pokrećem form2 bez prenošenja ikakvih vrijednosti. U form2 iz grida izabirem podatak i spremam ga u klasu (koja je instancirana u form2). Form2 se zatvara i sad bi mi trebao taj podatak iz klase u form1 (bez instanciranja nove form1 jer ona sadrži neke druge podatke nevezane za form2 i klasu).

 

Jel ovo dobro rješenje - klasu instancirati u form1, prenesti ju u form2, popuniti je tamo, zatvoriti form2 i popuniti txtbox u form1 sa podacima iz klase?

 

[edit] - konkretni primjer. U glavnom izborniku (form1) otvaram popis kupaca (form2). U popisu odabirem kupca, zatvaram formu i sad bi taj kupac morao biti u form1 (tj. gl. izborniku) za daljnju uporabu - ispis ponude i sl.

Ako preneses klasu iz forme 1 u formu 2 (odnosno ako prenosis byval a ne po referenci) onda ti se nece prebacit automatski klasa iz forme2 u formu 1. Odnosno objekt.

 

Ako ces po pravilima OOP-a, onda bi to trebao rijesiti preko delegata. 

 

Izvoli primjer: http://www.codeproject.com/Articles/17371/Passing-Data-between-Windows-Forms

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
16 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Ima malo o   delegatima   i na bug forumu {#}

Private
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

I na drugoj stranici ove teme.

16 godina
neaktivan
offline
Re: C# - Problemi i rješenja
royalhero kaže...

I na drugoj stranici ove teme.

...ups ...evo sad vidio .....nisam gledao ovu temu od početka {#}

Private
Poruka je uređivana zadnji put sub 28.7.2012 17:29 (Private).
16 godina
odjavljen
offline
C# - Problemi i rješenja

Hvala svima, delegati riješeni.

 

Nego, imam jedno drugo pitanje. Kako najlakše napraviti neki report (dakle, dokument sa zaglavljem, nešto informacija iz grida tipa račun i cijene)? za WPF ima Reports gotov ali u WinForms? Kako tamo napraviti neki report da ne ratujem sa txt dokumentima ili rtf editorom.

http://nighthawk-software.blogspot.com/
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Ako si na .NET-u 3.5/VS2008, skini Report Viewer kontrolu tu.

 

A ako si na .NET-u 4, imaštu.

Poruka je uređivana zadnji put sub 28.7.2012 20:12 (royalhero).
17 godina
offline
C# - Problemi i rješenja
Ma eksportaj ga u pdf i tako printaj.
Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
 
0 0 hvala 0
16 godina
odjavljen
offline
C# - Problemi i rješenja

Je li pametnije hvatati exception kroz veliki try...catch blok (cijela metoda u blok) na Exception ili je bolje po mogućim "problematičnim" mjestima tipa na adapter.Fill(dataset) preko SqlException?

 

Moguće je da netko u postavkama promijeni conn string (u konfiguraciji aplikacije) - kad uhvatim taj exception program baci error message i zapiše ga u log file preko glavnog error handlera (za cijeli program) ali nastavlja dalje za izvršavanjem pa onda opet baca exception na dataAdapteru ili na nekom drugom mjestu. Nikako ne mogu naći način da se izvođenje prekine kada naleti na exception na "visokom" mjestu (conn.Open).

 

tl;dr - koji je najbolji način za hvatanje exceptiona - na generalno Exception ili "niže" na SqlException? Radnja u svakom slučaju neće uspjeti ali što napraviti?

http://nighthawk-software.blogspot.com/
Moj PC  
0 0 hvala 0
17 godina
offline
C# - Problemi i rješenja

Pa jel mos testirat conn string kod unosa? Dakle prije nego ga "sejvas"?

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
 
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Pa, mogao bi u tom config prozoru (koji sprema postavke u xml fajl) napraviti neku provjeru konekcije tipa da samo vidi jel select na test_t vraća vrijednost 1.

 

Ali to ne eliminira mogućnost da usred rada server postane nedostupan (sql server na mreži) pa da onda kod neke read/write operacije dođe do exceptiona.

http://nighthawk-software.blogspot.com/
17 godina
offline
Re: C# - Problemi i rješenja
Sum_of_all_fears kaže...

Pa, mogao bi u tom config prozoru (koji sprema postavke u xml fajl) napraviti neku provjeru konekcije tipa da samo vidi jel select na test_t vraća vrijednost 1.

 

Ali to ne eliminira mogućnost da usred rada server postane nedostupan (sql server na mreži) pa da onda kod neke read/write operacije dođe do exceptiona.

Kako se spajas na bazu? Imas neki gotov datagrid ili?

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Ne kužim baš pitanje. Sve je "ručno" definirano, ništa preko onog "Add data source" wizarda.

http://nighthawk-software.blogspot.com/
17 godina
offline
Re: C# - Problemi i rješenja
Sum_of_all_fears kaže...

Ne kužim baš pitanje. Sve je "ručno" definirano, ništa preko onog "Add data source" wizarda.

Dakle, imas svoj DAL u kojem vuces podatke iz baze i onda proslijedujes na grid ili di vec?

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Kako pristupaš bazi? Pod to ručno vjerovatno misliš da ovako nešto:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            SqlConnection con = new SqlConnection();
            con.ConnectionString=@"Data Source=server;Initial Catalog=baza;Integrated Security=True";
            try
            {
                con.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                MessageBox.Show(con.State.ToString());
            }
        }
    }
}

 

Kada u catch stavim SqlException i napravim grešku u conn stringu, dobijem istu poruku kao i kod Expceptiona.

16 godina
odjavljen
offline
Re: C# - Problemi i rješenja
tnakir kaže...

Dakle, imas svoj DAL u kojem vuces podatke iz baze i onda proslijedujes na grid ili di vec?

Da, imam svoj DAL koji prosljeđuje te podatke u grid, klase, listboxeve i na hrpu drugih mjesta. Zbog zahtjeva klijenta, poduplan je - nema zajedničke klase koja bi sakupljala cijene iz baze nego cijenik ima svoje, izračun ima svoju klasu a ispis kombinira to dvoje. Malo čudan design, ali što ćeš. v2 će biti pametnije dizajniran.

 

Kao što je royalhero dao primjer:

royalhero kaže...

Kako pristupaš bazi? Pod to ručno vjerovatno misliš da ovako nešto:

<cut>

 

Kada u catch stavim SqlException i napravim grešku u conn stringu, dobijem istu poruku kao i kod Expceptiona.

Stvar je u tome što SqlException ne hvata NullArgument ili InvalidArgument (bubam napamet) nego se crasha uz unhandled exception.

 

Stvar je manje-više riješena tako da je većina koda u try..catch bloku a mjesta koja su potencijalni troublemakeri imaju dodatni try...catch na par mjesta koji zapisuje detalje exceptiona u log file radi kasnijeg rješavanje problema (dok ti njima objasniš što je print screen...).

 

Imam error_handler klasu koja sprema skoro sve exceptione (osim onih tipa krivi format cijene i sl.) i to sve ide u log file - tekst exception, dio argumenata (ako je moguće, barem tekst upita) i ručno upisana "razina" - da mogu brže naći di je problem.

http://nighthawk-software.blogspot.com/
14 godina
neaktivan
offline
C# - Problemi i rješenja

Što trebam dodati ovom kodu da bi mogao Anti Aliase liniju koju renderiram?

 

private void BresLineOrig(int x, int y, int x2, int y2, Color color)        {                       int nextx = x, nexty = y;            int deltax = x2 - x;            int deltay = y2 - y;            int error = deltax / 2;            int ystep = 1;            if (y2 < y)            {                ystep = -1;                deltay = y - y2;            }            else if (y2 == y) ystep = 0;            while (nextx < x2)            {                AddPixel(nextx, nexty, color);                nextx++;                error -= deltay;                if (error < 0)                {                    nexty += ystep;                    error += deltax;                }            }        }

MG
Moj PC  
0 0 hvala 0
15 godina
offline
C# - Problemi i rješenja

Imam jedan exception koji nikako ne mogu rijesit. Dakle imam bazu podataka sa 2 tablice: "Korisnik" je jedna tablica a "Poruka" je druga tablica. Korisnik ima property-e "ID" te "IME" a poruka ima "ID"  "Tekst_poruke" te povezni kljuć "KorisnikId" koji povezuje poruku s korisnikom. E sad korisnik kroz MVC formu unosi svoje ime te unosi poruku, Program provjerava da li korisnik postoji, ako postoji treba samo dodati novu poruku u bazu te je povezati s tim korisnikom pomoću poveznog ključa "KorisnikId" a ako ne postoji treba dodati novog korisnika u bazu te ga povezati s njegovom porukom. Nakon toga poruka se ispisuje al to je nebitan dio. Sad ću vam zalijepit kod AKCIJE koja izvršava sve ovo, označit ću liniju kod koje se javlja exception koji vidite na ss-u pa ako bi mi mogli pomoć da ga riješim bilo bi dobro :D. Dakle exception se javlja kad se poruka pokuša zapisati u bazu.

 

 

  [HttpPost]

     public ActionResult Login(LoginView model, string returnUrl)

     {      

 

            string imekorisnika = model.FirstName;

            string korisnikovaporuka = model.Poruka;

 

 

       using (var context = new Model1Container())

       {

         var korisnik = new Korisnik();

         korisnik.Ime = imekorisnika;

 

         var poruka = new Poruka();

         poruka.Tekst_poruke = korisnikovaporuka;

         poruka.KorisnikId = korisnik.Id;

 

           var pretragakoriskika =

           from korisnik1 in context.Korisnici

           where korisnik1.Ime == imekorisnika

           select korisnik1;

 

 

 

           if (pretragakoriskika.Any() == true)

         {          

           context.AddToPoruke(poruka);  

           context.SaveChanges();   ----------------------------- PROBLEM SE JAVLJA KAD PROGRAM DOĐE U OVU LINIJU!

         }

           else

         {

           context.AddToKorisnici(korisnik);

           context.AddToPoruke(poruka); 

           context.SaveChanges();

         }

 

 

         return RedirectToAction("PostanaPoruka", "Home");

       }

 

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
Poruka je uređivana zadnji put čet 16.8.2012 20:54 (athlon64).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Mirko4464 kaže...

Što trebam dodati ovom kodu da bi mogao Anti Aliase liniju koju renderiram?

Promijeniti algoritam za crtanje, eto što. Prouči Wuov algoritam za antialiased linije

 

http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm

http://freespace.virgin.net/hugo.elias/graphics/x_wuline.htm

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

@athlon,

postavi sliku dijagrama baze, da vidim kako si napravio relaciju. Na toj liniji daje grešku uvjek kada je nešto problematično sa radom sa bazom, jer entity model tada komunicira sa istom.

15 godina
offline
Re: C# - Problemi i rješenja
royalhero kaže...

@athlon,

postavi sliku dijagrama baze, da vidim kako si napravio relaciju. Na toj liniji daje grešku uvjek kada je nešto problematično sa radom sa bazom, jer entity model tada komunicira sa istom.

here u go

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
Poruka je uređivana zadnji put čet 16.8.2012 21:37 (athlon64).
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Da li si siguran da si povezao odgovarajuće ćelije. I na kraju da li si postavio identity na primarni ključ?

15 godina
offline
Re: C# - Problemi i rješenja
royalhero kaže...

Da li si siguran da si povezao odgovarajuće ćelije. I na kraju da li si postavio identity na primarni ključ?

da,dobro su povezane. Id nisam dirao, ID se automatski generira i on je samo svojstvo prema kojem se nešt traži po bazi, nebi ga se trebalo mijenjat. Povezni kljuć tj KorisnikID sam postavio na ID korisnika, tako da se zna koji korisnik se povezuje s kojom porukom

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Ne trebas objasnjavati relacije.

Sto se ID-a tice, moras ga postaviti da se svaki put, kada se u bazu upise novi zapis, inkrementira za jedan ili koliko ti hoces. Odakle ucis baze?, malo lupas, to bi se moglo odraditi i bez relacija, relacije su tu iz nekih drugih razloga.

Moguce da je do identity-a, pogledaj identity specification za ta dva primarna kljuca.

Nova poruka
E-mail:
Lozinka:
 
vrh stranice