|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
29.10.2010, 17:44 | #181 | ||
Starosedelac
Član od: 20.12.2005.
Lokacija: Banja Luka
Poruke: 2.030
Zahvalnice: 147
Zahvaljeno 207 puta na 133 poruka
|
Re: How to... C#
Citat:
Citat:
Ali je sad malo zapelo nešto drugo, našao sam u jednoj knjizi kako se sredi ono sortiranje kolona u ListView, napravi se klasa koja podržava IComparer i tu se definiše šta i kako radi, i to mi je proradilo, ali samo djelomično. Naime sortiranje kolona sa datumom kad je film pogledan i ocjenom ne rade kako treba, ne sortira ih uredno. Koliko vidim problem je što su svi upisani podaci u XML-u u string formatu, npr kada sam unosio datum radio sam sa DateTimePicker kontrole i podatak sam uzeo sa Kod:
string datumGledanja = dtpDatumGledanja.Value.ToShortDateString(); XmlText text = xmlDoc.CreateTextNode(datumGledanja); Kod:
string ocjenaFilma = (string)comboOcjena.SelectedItem; Kod:
private static int PoredjenjeSubitema(ListViewItem.ListViewSubItem sub1, ListViewItem.ListViewSubItem sub2) { if (sub1.Tag == null || sub2.Tag == null) { return CaseInsensitiveComparer.DefaultInvariant.Compare(sub1.Text, sub2.Text); } else if (sub1.Tag is Int32) { int x1 = (Int32)sub1.Tag; int x2 = (Int32)sub2.Tag; return x1.CompareTo(x2); } else if (sub1.Tag is DateTime) { DateTime x1 = (DateTime)sub1.Tag; DateTime x2 = (DateTime)sub2.Tag; return x1.CompareTo(x2); } throw new ArgumentException("U nemogucnosti da sortiram ListViewItem instance"); } Šta da radim? Ovako sam ubacivao u ListView Kod:
XmlNodeList listaFilmova = rootXml.ChildNodes; foreach (XmlNode filmNode in listaFilmova) { ListViewItem listItem = new ListViewItem(filmNode.ChildNodes[0].InnerText); // Nalov filma listItem.SubItems.Add(filmNode.ChildNodes[1].InnerText); // Godina listItem.SubItems.Add(filmNode.ChildNodes[3].InnerText); // DatumGledanja listItem.SubItems.Add(filmNode.ChildNodes[4].InnerText); // Ocjena listItem.SubItems.Add(filmNode.ChildNodes[5].InnerText); // Top250 listItem.SubItems.Add(filmNode.ChildNodes[6].InnerText); // DVD kolekcija lstFilmovi.Items.Add(listItem); } Kod:
Int32.Parse(filmNode.ChildNodes[4].InnerText) Dakle kako da sortiram kolone u ListView tipa "Ocjena filma" kada je ocjena u XML unesena kao string? |
||
29.10.2010, 19:14 | #182 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Vidi ako ti je filmNode.ChildNodes[4].InnerText stvarno int tip i jedino int onda koristiš Int32.Parse, a ako nije moraćeš sa int.TryParse. E sad bilo bi lepo da pročitaš poruku koju ti intellisence prijavljuje, odnosno grešku, jer je tu ključ tvog problema.
U ostalom, ako ti onaj nod zahteva string, onda ćeš morati prvo da ga konvertuješ u string pa u int. npr.: Kod:
Int32.Parse(filmNode.ChildNodes[4].InnerText.ToString()); |
29.10.2010, 20:11 | #183 |
Starosedelac
Član od: 20.12.2005.
Lokacija: Banja Luka
Poruke: 2.030
Zahvalnice: 147
Zahvaljeno 207 puta na 133 poruka
|
Re: How to... C#
Sve je u XML uneseno kao string jer sam radio sa XmlText i CreateTextNode koji primaju samo string (može li drugačije?), npr.
Kod:
XmlText text = xmlDoc.CreateTextNode(nazivFilma); text = xmlDoc.CreateTextNode(godinaFilma); text = xmlDoc.CreateTextNode(datumGledanja); Kod:
string datumGledanja = dtpDatumGledanja.Value.ToShortDateString(); Ocjena filma (koja je isto konvertovana u string pri upisu u XML) mi se ovako unosi iz XML-a u petu kolonu ListView-a Kod:
listItem.SubItems.Add(filmNode.ChildNodes[4].InnerText); // Ocjena Kod:
listItem.SubItems.Add(Int32.Parse(filmNode.ChildNodes[4].InnerText)); // Ocjena Kod:
listItem.SubItems.Add(Int32.Parse(filmNode.ChildNodes[4].InnerText.ToString())); // Ocjena The best overloaded method match for 'System.Windows.Forms.ListViewItem.ListViewSubItem Collection.Add(string)' has some invalid arguments Cannot convert from 'int' to 'string' I zbog toga mi ne radi na pravi način soritanje kolona "Ocjena filma" i "Datum gledanja" u ListView-u jer su svi elementi u njemu string, a da su Integer ili DateTime onda bi radilo. Sortiranje onoga što i treba biti string kao "Naziv filma" radi kako treba. Samo da mi je natjerati i ocjene i datum da se sortiraju |
29.10.2010, 21:33 | #184 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Vidi, veoma je jednostavan problem. Ovo znači da ti je filmNode.ChildNodes[4].InnerText već u string formatu, ali da sadrži ne int karaktere u njemu. Mislim da ti je pored broja prošao i neki beli spejs koji ne možeš da vidiš pa ne može da uradi konverziju. Da bi to rešio imaš više načina, od sečenja stringa za taj razmak pa do splitovanja tog stringa u neki niz.
npr. Kod:
int[] nekiInt = filmNode.ChildNodes[4].InnerText.Split(' '); ili Kod:
string nekiString = filmNode.ChildNodes[4].InnerText; nekiString.Remove(nekiString.Lenght - 1); int nekiInt = Int32.Parse(filmNode.ChildNodes[4].InnerText); npr. nekiInt.ToString() Poslednja ispravka: Todors (29.10.2010 u 21:50) |
30.10.2010, 0:55 | #185 | |
Starosedelac
Član od: 20.12.2005.
Lokacija: Banja Luka
Poruke: 2.030
Zahvalnice: 147
Zahvaljeno 207 puta na 133 poruka
|
Re: How to... C#
Citat:
Ali ovaj je u knjizi sortirao integere i DateTime na taj način što je kod implementacije IComparer interfejsa u klasu za sortiranje provjeravao tip podataka pomoću Tag propertija Kod:
private static int PoredjenjeSubitema(ListViewItem.ListViewSubItem sub1, ListViewItem.ListViewSubItem sub2) { if (sub1.Tag == null || sub2.Tag == null) { return CaseInsensitiveComparer.DefaultInvariant.Compare(sub1.Text, sub2.Text); } else if (sub1.Tag is Int32) { int x1 = (Int32)sub1.Tag; int x2 = (Int32)sub2.Tag; return x1.CompareTo(x2); } else if (sub1.Tag is DateTime) { DateTime x1 = (DateTime)sub1.Tag; DateTime x2 = (DateTime)sub2.Tag; return x1.CompareTo(x2); } throw new ArgumentException("U nemogucnosti da sortiram ListViewItem instance"); } We leverage the fact here that we assigned the actual value of each subitem to the Tag property for all nonstring columns. Knowing this, we sort the items based on the Type of the first item. We only handle integer and date-time types in our code, as these are the only types required for our sample. Additional types could be added in a similar manner. Zato on ispituje da li je Tag nekog subitema Integer ili DateTime da bi utvrdio da je taj subitem Integer ili DateTime, i onda vrši komparaciju Kod:
if (sub1.Tag is Int32) Samo gledam gdje i kako da onda definišem Tag-ove za svoje subiteme. Imaš li ideju? Nakon toga bi mi gornji kod trebao raditi. |
|
30.10.2010, 8:55 | #186 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Ovaj kod ne sortira stringove, već intidžere i vreme (mada samo pretpostavljam jer ne vidim šta radi metoda CompareTo()). On samo proverava da li string može da se konvertuje u int, pa ako može izvrši CompareTo(), a pre toga konvertuj u int ili u DateTime.
Tako da sam već rekao. Čuvaš polja u int-u, al kad ti zatreba u listView-u jednostavno konvertuješ taj int u string zbog prikaza. Trebaće ti malo vremena da se navikneš na ovakav pristup i ja sam imao problema u početku, al vidićeš da ti to nikad neće predstavljati problem u kreiranju složenijih algoritama. |
4.11.2010, 14:39 | #187 |
Veteran
Član od: 28.7.2007.
Lokacija: Rockin world!
Poruke: 700
Zahvalnice: 303
Zahvaljeno 265 puta na 97 poruka
|
Re: How to... C#
Imam opet problem. Napravio sam klasu i sad ocu da napravim niz objekata te klase i da redom uzimam podatke (preko konzole) za polja klase. Evo ga kod:
Klasa: Kod:
class Daska { //Fields private string _ime; private double _sirina; private double _duzina; //Properties public string ime { get { return ime; } set {_ime= value; } } public double sirina { get { return sirina; } set { _sirina= value; } } public double duzina { get { return duzina; } set { _duzina= value; } } } Kod:
Daska[] d1= new Daska[4]; for (int i = 0; i < d1.Length; i++) { Console.Write("Ime {0}. daske: ", i+1); d1[i].ime = Console.ReadLine(); } for (int i = 0; i < d1.Length; i++) { Console.WriteLine(d1[i].ime); } |
4.11.2010, 14:49 | #188 | |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Citat:
|
|
4.11.2010, 18:05 | #189 |
Član
Član od: 27.3.2010.
Poruke: 84
Zahvalnice: 19
Zahvaljeno 0 puta na 0 poruka
|
Opet ja sa nekim problemom iz C#
Zna li neko kako isprintati sliku prikazanu u pictureBoxu koristeći printDialog?
Pravim neki picture viewer, pa sa se tu zaglavio. |
4.11.2010, 19:06 | #190 |
Veteran
Član od: 28.7.2007.
Lokacija: Rockin world!
Poruke: 700
Zahvalnice: 303
Zahvaljeno 265 puta na 97 poruka
|
Re: How to... C#
U klasi Daska imam string Ime. Kad napravim po 1 instancu klase, ime zadam ovako:
Kod:
Daska dsk1 = new Daska(); dsk1.Ime = "Steva" Daska dsk2 = new Daska(); dsk2.Ime = "Djura" Daska dsk3 = new Daska(); dsk3.Ime = "Mile"; Kod:
Daska[] dsk = new Daska[3]; Object reference not set to an instance of an object. To iskoci pre nego sto zada vrednost instanci dsk[0]. |
4.11.2010, 19:27 | #191 | |
Veteran
|
Re: How to... C#
Citat:
Kod:
d1[i] = new Daska(); P.S. I u klasi "Daska", ispravi nazive promenljivih u get-ovima. |
|
Sledeći korisnik se zahvaljuje korisniku iMa_NeKo_PljUgU na korisnoj poruci: | ||
Toce (4.11.2010) |
4.11.2010, 19:38 | #192 |
V.I.P. Programiranje
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
|
Re: How to... C#
tako je.
sa onim daska[] dsk = new daska[3] ti si sa tim "new" kreirao novi array i dodelio mu velicinu (3) ali svaki clan tog array-a upucuje ka "null" jer ne sadrzi u sebi ni jednu instancu daske. naravno, resenje je da za svaki element kreiras novu dasku (ili dodelis postojecu, sto je takodje validno) mozes znaci npr da uradis Kod:
daska[] dsk = new daska[3]; for (int i = 0; i < 3; i++) { daska d = new daska(); d.ime = "bla"; // ili naravno ucitavanje iz konzole daska[i] = d; } to u ovom konkretnom primeru nije narocito korisno ali u nekim drugim i te kako jeste. |
Sledeći korisnik se zahvaljuje korisniku irreal na korisnoj poruci: | ||
Toce (4.11.2010) |
4.11.2010, 19:55 | #193 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Treba ti niz
Ako ti treba niz onda moraš da ga deklarišeš. Npr. public string[] ime = new string[4]; i tek onda mozes da guras u ime koliko god ti treba, ali ne na nacin koji si ti naveo vec ovako Daska d1 = new Daska(); Znaci tek onda je d1.ime[0], prvi clan niza. |
4.11.2010, 20:03 | #194 | |
V.I.P. Programiranje
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
|
Re: How to... C#
Citat:
ne treba njemu niz imena nego niz dasaka, koji je uspesno kreirao (svaka daska = jedno ime) ono sto nije radio, nije kreirao instance u nizu, sto mu je "iMa_NeKo_PljUgU" objasnio, a ja sam dodao da moze i samo da dodeli vrednost vec postojece instance. |
|
4.11.2010, 20:11 | #195 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Heh, skontao sam tek kad sam video post od iMa_NeKo_PljUgU,. Preduhitrio me dok sam kucao moj odgovor.
|
4.11.2010, 23:08 | #196 |
Veteran
Član od: 28.7.2007.
Lokacija: Rockin world!
Poruke: 700
Zahvalnice: 303
Zahvaljeno 265 puta na 97 poruka
|
Re: How to... C#
Odlicno, sve radi kako treba. Samo jos jedno pitanje i necu vise danas . Da li mogu da nacrtam elipsu, ali ne da definisem pravougaonik u koji je upisana ta elipsa, nego recimo centar i duzinu osa/poluosa ili fokuse/ekscentricitet?
|
4.11.2010, 23:23 | #197 |
V.I.P. Programiranje
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
|
Re: How to... C#
zavisi o kojem crtanju pricas... gdi+ ?
u svakom slucaju, sve moze, ako znas matematiku |
4.11.2010, 23:27 | #198 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
Re: How to... C#
Pogledaj ovaj tutorijal možda vidiš nešto zanimljivo.
http://www.yevol.com/en/vcsharp/appl...n/Lesson14.htm |
4.11.2010, 23:27 | #199 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.086
Zahvaljeno 4.923 puta na 2.859 poruka
|
Re: How to... C#
Nacrtaš je matematičkom funkcijom za elipsu, samo ne crtaš tačku po tačku nego izračunate tačke spajaš linijom (ne znam kako ide u C#, u Delphiju je bilo tako što pozicioniraš tačku sa MoveTo(X, Y) pa vrtiš petlju sa LineTo(X, Y)).
|
4.11.2010, 23:37 | #200 | |
Veteran
Član od: 28.7.2007.
Lokacija: Rockin world!
Poruke: 700
Zahvalnice: 303
Zahvaljeno 265 puta na 97 poruka
|
Re: How to... C#
Citat:
Kod:
Graphics x = e.Graphics; Pen Olovka = new Pen(Color.Black); x.DrawEllipse(Olovka, 50, 50, 100, 90); // Ovo sam kucao napamet, mozda nesto ne valja Jel ima neki tutorial za to? Brzim prelazom preko gugla nisam nista nasao. Edit: Uh, dva odgovora dok ja otkucah jedan. Sutra cu preci dati tut i potraziti nesto o tim funkcijama, sad idem u krevet, fax pocinje zorom ranom. Pozdrav! |
|
Bookmarks sajtovi |
Tagovi |
c sharp, c# tutoriali, how to, visual studio |
|
|