[ Cal Lightman @ 10.11.2013. 12:18 ] @
Pozdrav svima.

Pre svega moram da napomenem da sam poprilično neupućen u programiranje, ali nešto se da sklopiti za sopstvene potrebe. Naime, ovaj put pokušavam da napravim sebi Phone Book, uz pomoć tutoriala koji sam našao na YT. Koristim Visual Studio 2013.

Tutorial je ovde:



Imam jedan problem - Directory.CreateDirectory mi jednostavno "ne radi". Da li se to dešava zato što se možda nešto menjalo u ovoj novoj verziji VS-a u odnosu na prethodne, pa ova "komanda" više ne radi na VS 2013?

Dakle, reč je o ovome, ovo je screenshot sa YT-a odnosno iz originalnog tutoriala:



A evo i mog koda, kada počnem da kucam dir - ništa "ne iskače", "ne nudi" mi Directory



Je l' može neko stručniji da mi pomogne da rešim problem?
[ Burgos @ 10.11.2013. 12:45 ] @
Nedostaje ti

Code:
using System.IO;


Klasa Directory se nalazi u System.IO namespace-u, pa da bi joj pristupio direktno (a ne preko System.IO.Directory), moraš imati odgovarajuću using deklaraciju.
[ Cal Lightman @ 10.11.2013. 15:59 ] @
@Burgos: Hvala prijatelju, problem rešen!

Elem...izrodio se još jedan. Opet, ne znam da li je do "kompatibilnosti" novih i starih verzija ili čega već, ali zadaje mi glavobolje linija gde stoji XmlTextWriter. Kod mene u Visual Studio 2013 to ne postoji, već samo XmlWriter i XmlText. Nevertheless, probao sam obe ove opcije kao i originalnu iz tutoriala, ali nijedna ne radi svoj posao.

Ovo je screenshot sa YT-a, deo tutorijala gde to stoji.



A ovako to izgleda kod mene:



Dakle, javlja neki error.

Pored toga, ne uspevam nikako da pronađem .xml file koji treba da se kreira. Treba napomenuti da koristim Windows 8.

Evo kako izgleda kompletan code:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Xml;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        List<Person> people = new List<Person>();
        private void Form1_Load(object sender, EventArgs e)
        {
            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            if (!Directory.Exists(path + "\\Phone Book"))
                Directory.CreateDirectory(path + "\\Phone Book");
            if (!File.Exists(path + "\\Phone Book\\settings.xml"))
                XmlTextWriter xW = new XmlTextWriter(path + "\\Phone Book\\settings.xml", Encoding.UTF8);
            xW.WriteStartElement("People");
            xW.WriteEndElement();
            xW.Close();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Person p = new Person();
            p.Name = textBox1.Text;
            p.Hometown = textBox2.Text;
            p.Address = textBox3.Text;
            p.Phone = textBox4.Text;
            p.Email = textBox5.Text;
            p.Birthday = dateTimePicker1.Value;
            p.AdditionalInfo = textBox6.Text;
            people.Add(p);
            listView1.Items.Add(p.Name);
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            dateTimePicker1.Value = DateTime.Now;
        }
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return; 
            textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
            textBox2.Text = people[listView1.SelectedItems[0].Index].Hometown;
            textBox3.Text = people[listView1.SelectedItems[0].Index].Address;
            textBox4.Text = people[listView1.SelectedItems[0].Index].Phone;
            textBox5.Text = people[listView1.SelectedItems[0].Index].Email;
            textBox6.Text = people[listView1.SelectedItems[0].Index].AdditionalInfo;
            dateTimePicker1.Value = people[listView1.SelectedItems[0].Index].Birthday;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Remove();
        }
        void Remove()
        {
            try
            {
                listView1.Items.Remove(listView1.SelectedItems[0]);
                people.RemoveAt(listView1.SelectedItems[0].Index);
            }
            catch { }
            }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            Remove();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            people[listView1.SelectedItems[0].Index].Name = textBox1.Text;
            people[listView1.SelectedItems[0].Index].Hometown = textBox2.Text;
            people[listView1.SelectedItems[0].Index].Address = textBox3.Text;
            people[listView1.SelectedItems[0].Index].Phone = textBox4.Text;
            people[listView1.SelectedItems[0].Index].Email = textBox5.Text;
            people[listView1.SelectedItems[0].Index].Birthday = dateTimePicker1.Value;
            listView1.SelectedItems[0].Text = textBox1.Text;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            XmlDocument xDoc = new XmlDocument();
            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            xDoc.Load(path + "\\Phone Book\\settings.xml");
            XmlNode xNode = xDoc.SelectSingleNode("People");
            xNode.RemoveAll();
                foreach (Person p in people)
                {
                    XmlNode xTop = xDoc.CreateElement("Person");
                    XmlNode xName = xDoc.CreateElement("Name");
                    XmlNode xHometown = xDoc.CreateElement("Hometown");
                    XmlNode xAddress = xDoc.CreateElement("Address");
                    XmlNode xBirthday = xDoc.CreateElement("Birthday");
                    XmlNode xPhone = xDoc.CreateElement("Phone");
                    XmlNode xEmail = xDoc.CreateElement("Email");
                    XmlNode xAdditionalInfo = xDoc.CreateElement("AdditionalInfo");
                    xName.InnerText = p.Name;
                    xHometown.InnerText = p.Hometown;
                    xAddress.InnerText = p.Address;
                    xBirthday.InnerText = p.Birthday.ToFileTime().ToString();
                    xPhone.InnerText = p.Phone;
                    xEmail.InnerText = p.Email;
                    xAdditionalInfo.InnerText = p.AdditionalInfo;
                    xTop.AppendChild(xName);
                    xTop.AppendChild(xHometown);
                    xTop.AppendChild(xAddress);
                    xTop.AppendChild(xBirthday);
                    xTop.AppendChild(xPhone);
                    xTop.AppendChild(xEmail);
                    xTop.AppendChild(xAdditionalInfo);
                    xDoc.DocumentElement.AppendChild(xTop);
                    xDoc.Save(path + "\\Phone Book\\settings.xml");
                }
        }
    }
        class Person
    {
        public string Name
        {
            get;
            set;
        }
        public string Hometown
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }
        public string Address
        {
            get;
            set;
        }
        public string Phone
        {
            get;
            set;
        }
        public string AdditionalInfo
        {
            get;
            set;
        }
        public DateTime Birthday
        {
            get;
            set;
        }
    }
}


Uopšte ne mogu da prokljuvim u čemu je problem, a nagađanja definitivno nisu od pomoći.

Hvala još jednom na pomoći.



[ Burgos @ 10.11.2013. 16:46 ] @
Umesto "javlja neki error", treba da kažeš koji error(e) javlja.

Prvo popravi ovo:

Code:
 if (!File.Exists(path + "\\Phone Book\\settings.xml"))
                XmlTextWriter xW = new XmlTextWriter(path + "\\Phone Book\\settings.xml", Encoding.UTF8);
            xW.WriteStartElement("People");
            xW.WriteEndElement();
            xW.Close();


u

Code:
           if (!File.Exists(path + "\\Phone Book\\settings.xml"))
           {
                XmlTextWriter xW = new XmlTextWriter(path + "\\Phone Book\\settings.xml", Encoding.UTF8);
                xW.WriteStartElement("People");
                xW.WriteEndElement();
                xW.Close();
            }
[ Cal Lightman @ 10.11.2013. 20:26 ] @
@Burgos: sorry mate.

Uradio sam to što si rekao, error je nestao. Što se tiče settings.xml, nađoh ga u total commanderu kada sam upalio opciju "Show hidden files".

Elem, krenuo sam sa poslednjim delom (http://www.youtube.com/watch?v=PMUDcLoQwB4) i sada mogu da kažem da sam završio sve, sve snimljeno, međutim kao i uvek tu je neko ali:

Dakle, to izgleda ovako:



Pokušam da ga startujem (debugujem) i ne uspevam, dakle uopšte "ne iskače" interface, već javlja ovo:



Treba napomenuti da sam, od prošlog javljanja, dodao još nešto koda pa sve to na kraju izgleda ovako:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Xml;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        List<Person> people = new List<Person>();
        private void Form1_Load(object sender, EventArgs e)
        {
            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            if (!Directory.Exists(path + "\\Phone Book"))
                Directory.CreateDirectory(path + "\\Phone Book");
            if (!File.Exists(path + "\\Phone Book\\settings.xml"))
            {
                XmlTextWriter xW = new XmlTextWriter(path + "\\Phone Book\\settings.xml", Encoding.UTF8);
                xW.WriteStartElement("People");
                xW.WriteEndElement();
                xW.Close();
            }
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(path + "\\Phone Book\\settings.xml");
            foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.Name = xNode.SelectSingleNode("Name").InnerText;
                p.Hometown = xNode.SelectSingleNode("Hometown").InnerText;
                p.Address = xNode.SelectSingleNode("Address").InnerText;
                p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("Birthday").InnerText));
                p.Phone = xNode.SelectSingleNode("Phone").InnerText;
                p.Email = xNode.SelectSingleNode("Email").InnerText;
                p.AdditionalInfo = xNode.SelectSingleNode("AdditionalInfo").InnerText;
                people.Add(p);
                listView1.Items.Add(p.Name);
                          
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Person p = new Person();
            p.Name = textBox1.Text;
            p.Hometown = textBox2.Text;
            p.Address = textBox3.Text;
            p.Phone = textBox4.Text;
            p.Email = textBox5.Text;
            p.Birthday = dateTimePicker1.Value;
            p.AdditionalInfo = textBox6.Text;
            people.Add(p);
            listView1.Items.Add(p.Name);
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            dateTimePicker1.Value = DateTime.Now;
        }
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return; 
            textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
            textBox2.Text = people[listView1.SelectedItems[0].Index].Hometown;
            textBox3.Text = people[listView1.SelectedItems[0].Index].Address;
            textBox4.Text = people[listView1.SelectedItems[0].Index].Phone;
            textBox5.Text = people[listView1.SelectedItems[0].Index].Email;
            textBox6.Text = people[listView1.SelectedItems[0].Index].AdditionalInfo;
            dateTimePicker1.Value = people[listView1.SelectedItems[0].Index].Birthday;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Remove();
        }
        void Remove()
        {
            try
            {
                listView1.Items.Remove(listView1.SelectedItems[0]);
                people.RemoveAt(listView1.SelectedItems[0].Index);
            }
            catch { }
            }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            Remove();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            people[listView1.SelectedItems[0].Index].Name = textBox1.Text;
            people[listView1.SelectedItems[0].Index].Hometown = textBox2.Text;
            people[listView1.SelectedItems[0].Index].Address = textBox3.Text;
            people[listView1.SelectedItems[0].Index].Phone = textBox4.Text;
            people[listView1.SelectedItems[0].Index].Email = textBox5.Text;
            people[listView1.SelectedItems[0].Index].Birthday = dateTimePicker1.Value;
            listView1.SelectedItems[0].Text = textBox1.Text;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            XmlDocument xDoc = new XmlDocument();
            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            xDoc.Load(path + "\\Phone Book\\settings.xml");
            XmlNode xNode = xDoc.SelectSingleNode("People");
            xNode.RemoveAll();
                foreach (Person p in people)
                {
                    XmlNode xTop = xDoc.CreateElement("Person");
                    XmlNode xName = xDoc.CreateElement("Name");
                    XmlNode xHometown = xDoc.CreateElement("Hometown");
                    XmlNode xAddress = xDoc.CreateElement("Address");
                    XmlNode xBirthday = xDoc.CreateElement("Birthday");
                    XmlNode xPhone = xDoc.CreateElement("Phone");
                    XmlNode xEmail = xDoc.CreateElement("Email");
                    XmlNode xAdditionalInfo = xDoc.CreateElement("AdditionalInfo");
                    xName.InnerText = p.Name;
                    xHometown.InnerText = p.Hometown;
                    xAddress.InnerText = p.Address;
                    xBirthday.InnerText = p.Birthday.ToFileTime().ToString();
                    xPhone.InnerText = p.Phone;
                    xEmail.InnerText = p.Email;
                    xAdditionalInfo.InnerText = p.AdditionalInfo;
                    xTop.AppendChild(xName);
                    xTop.AppendChild(xHometown);
                    xTop.AppendChild(xAddress);
                    xTop.AppendChild(xBirthday);
                    xTop.AppendChild(xPhone);
                    xTop.AppendChild(xEmail);
                    xTop.AppendChild(xAdditionalInfo);
                    xDoc.DocumentElement.AppendChild(xTop);
                    xDoc.Save(path + "\\Phone Book\\settings.xml");
                }
        }
    }
        class Person
    {
        public string Name
        {
            get;
            set;
        }
        public string Hometown
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }
        public string Address
        {
            get;
            set;
        }
        public string Phone
        {
            get;
            set;
        }
        public string AdditionalInfo
        {
            get;
            set;
        }
        public DateTime Birthday
        {
            get;
            set;
        }
    }
}


U kom grmu leži zec?

Još jednom, veliko hvala na pomoći.

@edit:

Od početka sam vukao problem i sa ContextMenuStripom, jednostavno ne reaguje kada pokušam da desnim klikom obrišem kontakt, ali to je nekako manje važno.




[ AMD guy @ 11.11.2013. 19:36 ] @
Greska je dosta opisna "root element is missing", to se odnosi na strukturu tvog xml fajla on mora da ima root element(i to samo jedan) ili document element(to je drugacije ime za root) koji obuhvata sve druge elemente u xml fajlu.

Nesto ovako
Code:
 <parent>
   <child>content</child>
   <child attribute="att"/>
 </parent>  


Kako izgleda tvoja struktura XML fajla?
[ Cal Lightman @ 11.11.2013. 21:02 ] @
@AMD Guy: Moram malo da pojasnim situaciju, dakle:

Ovo je opet screenshot sa YT-a iz originalnog tutoriala, na završetku istog, kako je čovek napravio da sve to izgleda:



A ovako mu izgleda xml file, dakle ponovo screenshot sa YT:



Ja sam to od njega slepo prepisivao pokušavajući da dodam neke sitne izmene i na taj način program prilagodim sebi.
Dakle, malo sam izmenio interfejs, dodao par polja tipa Hometown, Phone, "Clear All" button i "Search Bar" s kojim jednostavno želim da omogućim pretragu kontakata - ukucaš i on ga selektuje u Listview, pa bi sve to u mom slučaju trebalo da izgleda ovako:



Međutim, iz meni nepoznatih razloga, moj xml file je prazan.





Kada pokušam da startujem program, dobijam onaj error koji sam gore naveo. Možda to nije jedini error, ali taj mi prikazuje kada, kao što rekoh, pokušam da startujem program. Postavio sam takođe i kompletan code, možda će iskusno oko iz prve provaliti u čemu je fazon, za razliku od mene laika (duduka).

Moram da se ogradim, ovo je moj prvi dodir sa malo ozbiljnijim programiranjem, možda je trebalo da počnem od nekog jednostavnijeg projekta. Svakako, od ovog ne odustajem dok ga ne završim - tako da - molim Vas, pomagajte.

P.S.

Znam, ovako mali Perica zamišlja programiranje, ali to je tema za sebe.

[ AMD guy @ 12.11.2013. 09:13 ] @
Taj root element se upisuje samo kada fajl ne postoji, pogledaj u tvom kodu

if(!File.Exists(putanja do fajla)
ovo znaci ako fajl ne postoji(Znak ! oznacava negaciju), kreiraj fajl settings.xml na putanji koju su postavio i u tom fajlu kreiraj root element ali posto taj fajl postoji taj root element nece biti upisan(if nece biti izvrsen). Znaci obrisi taj xml fajl i pusti da ga program ponovo kreira ovog puta sa root elementom.
[ Cal Lightman @ 12.11.2013. 09:58 ] @
@AMD guy: Svaka čast.

Jednostavno sam obrisao xml file, ponovo startovao program i gle čuda. Dodao sam i code za Clear All button, kao i za Exit button.

MEĐUTIM!

1) Remove ne radi svoj posao baš najbolje. Dakle, selektujem kontakt, kliknem Remove i istina, on ga izbriše, ali samo iz Listview-a. Isti kontakti su ponovo tu kada ponovo startujem program. Ovako odokativno mislim da opet nešto brljavi taj xml file, nisam pametan.

2) ContextMenuStrip ne radi svoj posao uopšte, selektujem kontakt, desni klik - nothing happens. A trebalo bi da iskoči opcija Remove.

3) Nakon što selektujem kontakt i kliknem Remove, briše se iz Listview-a, međutim ostaju podaci u Textbox-ovima.

Code:
void Remove()
        {
            try
            {
                listView1.Items.Remove(listView1.SelectedItems[0]);
                people.RemoveAt(listView1.SelectedItems[0].Index);
            }
            catch { }
            }


Da li ovde ispod treba dodati kao za Clear All button, tj. da bude:

Code:
void Remove()
        {
            try
            {
                listView1.Items.Remove(listView1.SelectedItems[0]);
                people.RemoveAt(listView1.SelectedItems[0].Index);
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";
                dateTimePicker1.Value = DateTime.Now;            
             }
            catch { }
            }
            


Ili opet Perica ovako zamišlja programiranje?

4) SEARCH BAR. Još uvek nisam radio na Search Baru. Kao što rekoh, želeo bih da u taj textbox ukucam ime ili prezime i da, kako kucam, automatski traži i ako nađe - selektuje traženi kontakt. To bi bilo jednostavnije, planiram da napravim da mogu da tragam i po adresama, brojevima telefona itd. Da li to dodatno komplikuje posao (i koliko)? Uglavnom - šta, kako, nekakvi uputi, početne smernice, any hint...?

Svakako, još jednom, ENORMNO hvala.

@edit:

Ako sam nejasan, let me know, okačiću neki video da malo dočaram o čemu pričam.
[ AMD guy @ 12.11.2013. 11:49 ] @
Za remove predpostavljam da hoces iz XML fajla, probaj ovako
remove() koji si ti napisao radi samo za listview i remove iz List<Person> ali ne i iz XML-a.

ContextMenuStrip radi, samo ga nisi dobro primenio, treba da povezes tvoj contextmenustrip1 sa formom gde se ta kontrola nalazi, npr Form1 ima property ContextMenuStrip, dodelis tom property-ju tvoju contextmenustrip1
How to: Associate a ContextMenuStrip with a Control

[ Cal Lightman @ 12.11.2013. 20:56 ] @
OMG, muke žive.

1) Što se tiče ContextMenuStrip-a, evo podesih ovo:





Dakle, iskače lepo ali neće da obriše. Znači, ništa ne dešava, tj. samo se ugasi taj ContextMenu...



2) Dešava mi se još jedan error, dakle kada stisnem Save button a nijedan kontakt nije selektovan.



Ne znam kako da odradim situaciju "If noone is selected".

3) Što se tiče brisanja iz xml-a, proučavam ovaj link što si mi poslao. Nešto mi nije jasno.

Čovek pita
Citat:
I need to delete specific employee node and also its child node based on the value of id. For example, here I need to delete employee tag with id="2".

Na tom linku, čoveku xml file izgleda ovako:

Code:
<company>
    <employee>
        <id>1</id>
        <name>sa</name>
    </employee>
    <employee>
        <id>2</id>
        <name>ssa</name>
    </employee>
</company>

Oni mu nude dve opcije kako obrisati konkretno za id="2".

Citat:
Assuming you have loaded that into an XmlDocument named doc:

Opcija 1:
Code:

XmlElement el = (XmlElement)doc.SelectSingleNode("/company/employee[id=2]");
if(el != null) { el.ParentNode.RemoveChild(el); }


i Opcija 2:
Code:
XmlDocument xmlDoc = new XmlDocument();
 XmlNode nodeToDelete = xmlDoc.SelectSingleNode("/root/XMLFileName[@ID="+nodeId+"]");
            if (nodeToDelete != null)
            {
                nodeToDelete.ParentNode.RemoveChild(nodeToDelete);
            }
            xmlDoc.Save("XMLFileName.xml")

Pre svega, šta misliš, koju opciju izabrati? Meni lično, kao duduku, prva deluje jednostavnije i samim tim privlačnije. A i da priznam, ovu drugu slabo razumem.

Ono što mi je nejasno jeste sledeće. Meni ovo deluje, kao što rekoh, da je ovo rešenje konkretno za id="2". Šta staviti pa da ne bude id="2", već ono što je selektovano?

Moj code za remove izgleda ovako:

Code:
 void Remove()
        {
            try
            {
                listView1.Items.Remove(listView1.SelectedItems[0]);
                people.RemoveAt(listView1.SelectedItems[0].Index);
            }
            catch { }
            }


U slučaju da izaberem recimo prvu opciju, gde treba to dodati, da li direktno ispod linije

Code:
people.RemoveAt(listView1.SelectedItems[0].Index);


ili kako?

4) SEARCH bar - any suggestions?

Svakako, hvala ti k'o bratu.
[ AMD guy @ 13.11.2013. 17:12 ] @
Citat:
Ne znam kako da odradim situaciju "If noone is selected".


Code (csharp):

//Za to ti treba da proveris da li ti je SelectedItems.Count > 0 ako jeste onda izbaci iz listview-a ovako
if (listView1.SelectedItems.Count > 0)
                {
                    listView1.SelectedItems[0].Remove();
                }
                else
                {
                    MessageBox.Show("Noting is selected ","Obavestenje",MessageBoxButtons.OK,MessageBoxIcon.Information);
                }
 


Ovo stavljas u tvoju remove metodu koja ide u click event removeToolStripMenuItem-a koji si povezao sa contexMenuStrip

Citat:
Pre svega, šta misliš, koju opciju izabrati? Meni lično, kao duduku, prva deluje jednostavnije i samim tim privlačnije. A i da priznam, ovu drugu slabo razumem


Ti si krenuo odmah u sredinu izgleda pa ti zato nije jasno, kad bi se malo upoznao sa XML bilo bi ti jasnije. uzmi neku beginning XML knjigu pa citaj.
Obe opcije su dobre.

Citat:
Oni mu nude dve opcije kako obrisati konkretno za id="2".

Mozes preko InnerText property-ja da uzmes vrednost iz id, pa to sacuvas u nekoj promenljivoj koju mozes da koristis za svoje dalje svrhe. (Ovo je samo primer, probaj da to primenis na svojoj aplikaciji)
[ Cal Lightman @ 13.11.2013. 23:50 ] @
Citat:
Ti si krenuo odmah u sredinu izgleda pa ti zato nije jasno, kad bi se malo upoznao sa XML bilo bi ti jasnije. uzmi neku beginning XML knjigu pa citaj.
Obe opcije su dobre.


Upravo tako. Samouk sam, i to sam učio (učim) ovako stihijski, bez nekog sistema. Obično zamislim šta mi treba pa onda pokušavam to da napravim, u isto vreme učeći u hodu.


1) Hvala ti za ovu if petlju, ubacih je ovde:

Code:
void Remove()
        {
            try
            {
                if (listView1.SelectedItems.Count > 0)
                {
                    people.RemoveAt(listView1.SelectedItems[0].Index); 
                    listView1.SelectedItems[0].Remove();
                    textBox1.Text = "";
                    textBox2.Text = "";
                    textBox3.Text = "";
                    textBox4.Text = "";
                    textBox5.Text = "";
                    textBox6.Text = "";
                    dateTimePicker1.Value = DateTime.Now;
                }
                else
                {
                    MessageBox.Show("Noting is selected ", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch { }
        }


i ovde (Save button), jer mi iskače error kad stisnem Save a niko nije selektovan:

Code:
private void button1_Click(object sender, EventArgs e)
        {
                if (listView1.SelectedItems.Count > 0)
                {
                    people[listView1.SelectedItems[0].Index].Name = textBox1.Text;
                    people[listView1.SelectedItems[0].Index].Hometown = textBox2.Text;
                    people[listView1.SelectedItems[0].Index].Address = textBox3.Text;
                    people[listView1.SelectedItems[0].Index].Phone = textBox4.Text;
                    people[listView1.SelectedItems[0].Index].Email = textBox5.Text;
                    people[listView1.SelectedItems[0].Index].Birthday = dateTimePicker1.Value;
                    listView1.SelectedItems[0].Text = textBox1.Text;
                }
                else
                {
                    MessageBox.Show("Noting is selected ", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
        }


Je l' ovo OK?

2) Što se tiče brisanja iz xml-a, evo rešenja:



Dakle, obrnuo sam jednostavno redosled i sad radi. Doduše, ako imam recimo 5 kontakta u listi, i ako pokušam da obrišem svih 5 (1 po 1), a potom nakon brisanja ugasim program, kontakti su opet tu nakon ponovnog paljenja. Ali, ako obrišem prvo jedan, pa ugasim-upalim, pa onda drugi... i tako za svaki, onda se pravilno brišu. Ali, briše sve osim jednog, odnosno, ako ih ima 5 - obrisaće njih 4, ako ih ima 100 - obrisaće njih 99; tog jednog ostavlja ne znam iz kojeg razloga.

3) I dalje remove desnim klikom ne radi, ja ne znam više šta je problem.

Code:
    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            Remove();
        }


Hvala još jednom.



[ AMD guy @ 14.11.2013. 00:29 ] @
Citat:
3) I dalje remove desnim klikom ne radi, ja ne znam više šta je problem.

Vec sam ti rekao kako, treba ti u click event tvog context menu strip kontrole.

Citat:
Upravo tako. Samouk sam, i to sam učio (učim) ovako stihijski, bez nekog sistema. Obično zamislim šta mi treba pa onda pokušavam to da napravim, u isto vreme učeći u hodu.


Ja bih pre uzeo neku knjigu koja ima neki sistem ucenja, ovo tvoje ti moze da pravi vise problema nego koristi na duze staze. Ucenje programiranja "napamet" te moze samo jos vise zbuniti. Ove GUI kontrole i rad sa njima je veoma tanak sloj koji si poceo da skidas, te kontrole sluze samo za vizuelni prikaz, nema tu nekog velikog programiranja.
[ Cal Lightman @ 14.11.2013. 01:33 ] @
Reših ovaj desni klik.

Haha, sad kad sam skapirao, vidim koliko je (tragi)komično moje (ne)znanje. Naravno, u potpunosti si u pravu. To ću i da uradim jer, bez obzira što ne planiram (bar ne za sad) da se profesionalno bavim programiranjem, sigurno će se izroditi još nešto što ću poželeti da napravim za svoje potrebe, a ovako krpiti sa svih strana je totalno izgubilo na smislu. Što kaže moj otac: "Sine, ja mogu da te poguram da upališ auto, al' ne mogu da te guram 100 km". Bez nekog sistematičnog znanja i dobre potkovanosti, ovo će uvek delovati kao da mi ti pričaš na kineskom, a ja govorim samo mađarski - nema tu dodirnih tačaka. Šta je - tu je, kao što rekoh, nema nazad sad, završavam ovaj projekat a za sledeći ću se bolje pripremiti. Takođe, u potpunosti sam svestan činjenice da ovo nije možda ni 1% programiranja.

Nego, da se vratim na temu, da li imaš (ti ili neko drugi) neku ideju zbog čega se ovo dešava? Mislim na:

1) to što moram da izađem iz programa da bi se kontakt izbrisao i iz xml file-a i
2) to što ne mogu da obrišem taj poslednji kontakt koji ostane.

Na stranu Search bar, ostala su mi još ta dva problema pa da završim ovu golgotu.

Hvala i pozdrav.
[ AMD guy @ 14.11.2013. 07:08 ] @
Kod koji pises je vec resenje nekog problema koji si resio, prvo moras da opises to sto zelis da uradis u nekoliko recenica i tek onda da pocnes nesto da radis, ovo je nesto sto se zove Software development process

A za ova dva pitanja, da bi znao sta se desava u programu i zasto, moras da znas da debagujes program, ono ti omogucava da pratis tok izvrsavanja tvog programa, pratis da li se desava to sto si hteo ili ne.
Evo ti nekoliko linkova o debagovanju pa citaj. Ako to radis za sebe onda imas vremena za citanje
Mastering Debugging in Visual Studio 2010 - A Beginner's Guide
Debugging Express in c#
VS 2010 Debugger Improvements (BreakPoints, DataTips, Import/Export)


[Ovu poruku je menjao AMD guy dana 14.11.2013. u 09:09 GMT+1]