2017-06-15 61 views
-3

我嘗試使用ReadXmlWriteXml加載/保存一個XML文件中datagrid,但WriteXml方法只需要創建一個新的空文件,而不是更改保存到舊的。詳情請看:[鏈接] [1]爲什麼創建中WriteXML一個新的XML文件

---------------------------------- update-- --------------------------------------

private void RefreshModule() 
    { 
     ModulesView = new ListCollectionView(sdb.GetModules()) 
     { 
      Filter = obj => 
      { 
       var Module = (Module)obj; 
       return SelectedProduct != null && SelectedProduct.ModelNumber == Module.ModelNumber; 
      } 
     }; 
    } 

    private Product selectedProduct; 
    public Product SelectedProduct 
    { 

     get { return selectedProduct; } 
     set 
     { 
      if (selectedProduct != value) 
      { 
       selectedProduct = value; 
       NotifyPropertyChanged(); 
       RefreshModule(); 
      } 
     } 
    } 
+1

的可能的複製[保存數據網格變回XML文件(https://stackoverflow.com/questions/44541693/save-datagrid-changes-back-to-xml-file) –

+0

不要重複相同的問題。在你原來的問題中,我看不到試圖使用'WriteXml',你可能沒有正確使用它。 –

+0

對不起,但我真的需要解決這個問題。我試圖'StoreDbDataSet sdb = new StoreDbDataSet(); sdb.WriteXml(「store.xml」);'在'Button_Click'事件中,事實證明它創建了一個新的'store.xml'文件。 –

回答

1

您的SaveDataSet方法StoreDbDataSet類應取DataSet參數並將其序列化到該文件。

public void SaveDataSet(DatatSet ds) 
{ 
    ds.WriteXmlSchema(DatabaseConstructorName); 
    ds.WriteXml(DatabaseFileName); 
    ds.AcceptChanges(); 
} 

但如何是你應該能夠序列化DataSet如果設置了DataGrid的一個ObservableCollectionItemsSource財產?

返回的DataSetGetModules方法:

public DataSet GetModules() 
{ 
    return StoreDbDataSet.ReadDataSet(); 
} 

並綁定到DataTableDataView。事情是這樣的:

private DataSet _ds; 
private void RefreshModule() 
{ 
    _ds = sdb.GetModules(); 
    ModulesView = new ListCollectionView(ds.Tables["Modules"].DefaultView) 
    { 
     Filter = obj => 
     { 
      var Module = obj as DataRowView; 
      return SelectedProduct != null && SelectedProduct.ModelNumber == Module["ModelNumber"].ToString(); //ModuleNumber is the column name in the DataTable 
     } 
    }; 
} 

private void Writecfg_Button_Click(object sender, RoutedEventArgs e) 
{ 
    StoreDbDataSet sdb = new StoreDbDataSet(); 
    sdb.SaveDataSet(_ds); 
} 
+0

對不起,我很晚纔回復。在我試過你的代碼之後,'DataTable' **模塊**不會填充任何東西,並且在代碼中有一個警告'可能的非預期參考比較' –

+0

Product類的ModelNumber屬性是int還是字符串? – mm8

+0

它是一個'string'類型。 –

相關問題