【发布时间】:2017-06-13 03:05:44
【问题描述】:
我尝试将 xml 文件读取/保存到数据网格,并且我正在使用数据集来执行此操作。现在我已经成功将xml文件数据加载到datagrid了,代码如下:
public class StoreDbDataSet
{
internal static DataSet ReadDataSet()
{
DataSet ds = new DataSet();
ds.ReadXmlSchema("store.xsd");
ds.ReadXml("store.xml");
return ds;
}
}
还有:
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 文件:
<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>
视图模型:
public ICollectionView ProductsView
{
get { return _ProductsView; }
set
{
_ProductsView = value;
NotifyPropertyChanged();
}
}
我的问题是当我更改数据网格数据时,如何将更改保存到 xml?提前谢谢!
---------------更新------- ------------
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());
}
}
}
【问题讨论】:
-
WriteXml 怎么样?
-
我这样做了,但它只是创建了一个新的空 xml 文件。
-
您将哪个组件写入 xml?您正在将数据绑定到 ProductsView,请查看那里的 setter 方法的更改。如果更改,则将其写入 XML。
-
对不起,我已经更新了正确的代码。
-
好像我在datagrid中更改数据时,System没有在ProductView方法中调用NotifyPropertyChanged
标签: c# xml wpf datagrid dataset