2011-12-14 14 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() 

がnullを返すことに気づきました。だから私はif文を削除しようとしましたが、まだ何もありません。

EDIT:空のxmlファイルに書き込んで、少なくとも何かが書き込まれているかどうかを確認しようとしましたが、何もエラーが発生していないので、何も書かれていないtest2.xmlを開きます。 。 :(

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

私は新しいデータセットを作成し、最初の値を渡してみました。データセットに新しい行を追加しないと、値は空のxmlファイルに渡されますが、行を追加すると何も渡されません。 – Andres

答えて

0

[OK]を私はその機能がForeachループから呼び出されているため、実行することはできませんLoadSong機能にでWriteXmlにしようとしていたことを何...

まず間違いを動作するようにこれを得ました。

私はその後、私のFormClosingに行って、ちょうどこのようにそれをやった:

private void mediaplayer_FormClosing(object sender, FormClosingEventArgs e) 
{ 

    dsStore.WriteXml(path); 

} 

そして、それが必要なのかどうかわからない最後になりましたが、私はこのように上に私のデータセットを設定します。

public DataSet dsStore = new DataSet(); 

を追加値を保持していなかった場合のために "public"。あなたのために皆さんにお礼を言います。

1

は、細胞は、唯一あなたがセルを編集するときに働いているという事実があるため、その行の発生する可能性がありますので、編集されている場合、これが使用されている

dataGridView1.EndEdit(); 

を削除してください。

これは、行ごとに「DataRowState.Unchanged」にRowStateが更新されます

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

+0

は削除されています。 – Andres

2

あなたはラインを持っていますそのテーブルにこの理由は、

dsStore.GetChanges() 

は変更を戻しません。

AcceptChanges()呼び出しを削除してみます。

+0

も同様に試してみましたが、それでも新しい行は保存されません。 – Andres

関連する問題