2011-12-14 54 views
0

无法完全弄清楚我还需要做些什么来完成这项工作。 我想添加更多的行到我的数据集和datagridview然后输出一个到xml 理想情况下,我想保存数据集中的值,然后绑定datagridview,当关闭表单输出数据集到一个XML文件。但由于某种原因,这是行不通的。它会更新对当前行的更改,但不会添加新行。将数据集中的新行保存到xml中

public void LoadSongInfo(string filename) 
    { 
     TagLib.File tagFile = TagLib.File.Create(filename); 
     string artist = tagFile.Tag.FirstAlbumArtist; 
     string album = tagFile.Tag.Album; 
     string title = tagFile.Tag.Title; 

     DataRow newtrack = dsStore.Tables["Track"].NewRow(); 

     newtrack["Id"] = "5"; 
     newtrack["Artist"] = artist; 
     newtrack["Album"] = album; 
     newtrack["Filepath"] = filename; 
     newtrack["Title"] = title; 
     dsStore.Tables["Track"].Rows.Add(newtrack); 
     dsStore.Tables["Track"].AcceptChanges(); 


     dataGridView1.DataMember = "Track"; 
     dataGridView1.DataSource = dsStore; 
    } 

    private void mediaplayer_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     string path = "..//..//..//temp.xml"; 
     dataGridView1.EndEdit(); 
     if (dsStore.GetChanges() != null) 
     { 
      dsStore.WriteXml(path); 
     } 
    } 

我注意到,

dsStore.GetChanges() 

返回空值,除非电池已被编辑。所以我试图删除,如果声明,但仍然没有。

编辑:我试图写一个空的XML文件,看看它是否至少写了一些东西,并没有错误,像所有事情都是好的,然后当我打开test2.xml它的空白什么都没有写。 :(

private void mediaplayer_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     string path2 = "..//..//..//test2.xml"; 
     dsStore.WriteXml(path2); 
    } 
+0

好吧我尝试创建一个新的数据集,并从第一个值传递。如果我不向数据集添加任何新行,它会将值传递给一个空的xml文件,但是如果我添加行,它不会传递任何内容。 – Andres 2011-12-14 22:03:27

回答

0

好吧,我得到这个工作..

第一个错误是什么,我试图在中WriteXML LoadSong来功能无法完成,因为该功能正在从foreach循环调用。

然后我去了我的FormClosing,只是做了这种方式:

private void mediaplayer_FormClosing(object sender, FormClosingEventArgs e) 
{ 

    dsStore.WriteXml(path); 

} 

和最后不知道这是否是必要的,但我把我的数据集放在上面是这样的:

public DataSet dsStore = new DataSet(); 

添加“公开”的情况下,它不保持价值..感谢大家为你提供帮助。

1

尝试取出

dataGridView1.EndEdit(); 

如果正在编辑单元格这样的事实,当你编辑单元格可能是因为该行造成它的唯一的工作,这是使用。

+0

删除它,仍然没有。 – Andres 2011-12-14 17:08:42

2

你也行:

dsStore.Tables["Track"].AcceptChanges(); 

这将更新的RowState为“DataRowState.Unchanged”的每一行在那张桌子里。这就是为什么

dsStore.GetChanges() 

没有返回任何更改。

尝试删除AcceptChanges()调用。

+0

也尝试过,并且没有任何东西仍然不能保存新行。 – Andres 2011-12-14 17:23:51