Avatar billede diyar Nybegynder
29. januar 2011 - 13:12 Der er 3 kommentarer og
1 løsning

Brug af XML i C# istedet for en database (tabel)

Hej,

Jeg er ved at lave et lille applikation i C# hvor jeg har brug for at gemme nogle data i en XML fil. I programmet viser jeg data fra XML'en i en DataGridView, men jeg vil gerne kunne lave ændringer og gemme det i samme XML fil. Jeg kan ikke få det til at gemme ændringer eller tilføjelse. Her er lidt kode:
        public Form1()
        {
            InitializeComponent();
            dataSet1.ReadXml("C:\\tmp\\test.xml");
            this.bindingSource1.DataSource = dataSet1.Tables["Row"];
            dataGridView1.DataSource = bindingSource1;
        }
Jeg bruger en bindingNavigator's SAVE knap til at kunne gemme:

        private void saveToolStripButton_Click(object sender, EventArgs e)
        {

            int i = dataGridView1.RowCount;
            bindingSource1 = (BindingSource)dataGridView1.DataSource;
            DataTable dt = new DataTable();
            dt = (DataTable)bindingSource1.DataSource;
            dt.WriteXml("C:\\tmp\\test.xml");
}

Jeg ville blive glad hvis du kunne hjælpe.
Tak på forhånd.
Avatar billede 2Mida Praktikant
29. januar 2011 - 13:27 #1
Hvilken fejlkode?

Er du sikker på stien?
dataSet1.ReadXml("C:\\tmp\\test.xml"); Dobbelt slash?
Avatar billede diyar Nybegynder
29. januar 2011 - 13:35 #2
Hej jeg får ikke fejlkode, der bliver kun gemt det der var blevet oprindelig læst fra selve XML filen.

Dvs. Hvs der var to rækker af data med 3 kolonne i filen:

aa bb cc
dd ff mm

Så er det det samme der liver gemt, selvom jeg tilføejer en ny række i min DataGridView.

Ang. stiien, ja det er præcis som det skal være.


Hilsen
Delman
Avatar billede johny Nybegynder
31. januar 2011 - 19:19 #3
@diyar: Hvad med sletning, virker det? For hvis ikke, så skyldes det evt. at når du kører i debug mode, så kopierer den original filen over, og så er det kopien du arbejder på. Dvs. ændringer gemmes kun pr. debugging session, og de forsvinder derfor igen så snart du lukker programmet. Anyways, bare et skud.
Avatar billede diyar Nybegynder
31. januar 2011 - 21:26 #4
Nej, det var ikke tilfældet, jeg har fået løst det på en anden måde.
Jeg fandt selv ud af det. Jeg bruger Form_load event istedet for, så gider den godt at gemme.

    public partial class Form1 : Form
    {
        //DataSet mydataSet = new DataSet();
        DataTable dtbl;
        public Form1()
        {
            InitializeComponent();
        }
     
        private void Form1_Load(object sender, EventArgs e)
        {
            DataGridView dataGridView1 = new DataGridView();
            DataTable dt = new DataTable("Row");
            dt.ReadXmlSchema("C:\\tmp\\test.xml");
            dt.ReadXml("C:\\tmp\\test.xml");
            //dt.Columns.Add("id", typeof(int));
            //dt.Columns.Add("name", typeof(string));
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
                dt.Rows.Add(dataGridView1[0, i].Value.ToString(), dataGridView1[1, i].Value.ToString());
            dt.AcceptChanges();
            this.dataGridView1.DataSource = dt.DefaultView;
        }

        private void saveToolStripButton_Click(object sender, EventArgs e)
        {
            dtbl = ((DataView)this.dataGridView1.DataSource).Table;
            dtbl.WriteXml(@"C:\tmp\AA.xml");

        }
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester