I have tried to read/save xml file to datagrid and I'm using dataset to do it. Now I have succeed to load xml file data to datagrid, the code as follows:
public class StoreDbDataSet
{
internal static DataSet ReadDataSet()
{
DataSet ds = new DataSet();
ds.ReadXmlSchema("store.xsd");
ds.ReadXml("store.xml");
return ds;
}
}
And:
public class StoreDb
{
public ObservableCollection<Product> GetProducts()
{
DataSet ds = StoreDbDataSet.ReadDataSet();
ObservableCollection<Product> products = new ObservableCollection<Product>();
foreach (DataRow productRow in ds.Tables["Products"].Rows)
{
products.Add(new Product((string)productRow["ModelNumber"],
(string)productRow["ModelName"], (string)productRow["InputAddress"],
(string)productRow["OutputAddress"], (string)productRow["DiagAddress"],
(string)productRow["Description"], (byte)productRow["CategoryID"],
(string)productRow["CategoryName"], (string)productRow["ProductImage"]));
}
return products;
}
}
Xaml File:
<DataGrid Name="dgBasicInfo" ItemsSource="{Binding ProductsView, Mode=TwoWay}" CanUserResizeColumns="False" AutoGenerateColumns="False" Margin="10,10,10,15" BorderThickness="5" FontSize="14" Background="White">
<DataGrid.Columns>
<DataGridTextColumn Header="SlaveId" Binding="{Binding CategoryID}" />
<DataGridTextColumn Header="ModelName" Binding="{Binding ModelName}"/>
<DataGridTextColumn Header="CategoryName" Binding="{Binding CategoryName}" />
<DataGridTextColumn Header="InputAddress" Binding="{Binding InputAddress}" />
<DataGridTextColumn Header="OutputAddress" Binding="{Binding OutputAddress}" />
<DataGridTextColumn Header="DiagAddress" Binding="{Binding DiagAddress}" />
<DataGridTextColumn Header="Specification" Binding="{Binding Description}" />
</DataGrid.Columns>
</DataGrid>
The ViewModel:
public ICollectionView ProductsView
{
get { return _ProductsView; }
set
{
_ProductsView = value;
NotifyPropertyChanged();
}
}
My question is when I changed the datagrid data, how can I save the changes to xml?Thanks in advance!
---------------------------update-------------------------------
private void RefreshProductList()
{
ProductsView = new ListCollectionView(sdb.GetProducts())
{
Filter = obj =>
{
var Product = (Product)obj;
return SelectedProduct != null && Product.ModelNumber == SelectedProduct.ModelNumber;
}
};
}
private Product selectedProduct;
public Product SelectedProduct
{
get { return selectedProduct; }
set
{
if (selectedProduct != value)
{
selectedProduct = value;
NotifyPropertyChanged();
RefreshProductList();
RefreshModule();
RefreshCommunication();
List<Product> productlist = ProductsView.ToList();
File.WriteAllText("store.xml", productlist.ToXML());
}
}
}