2017-06-15 71 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'类型。 –

相关问题