C# WPF将行添加到XML绑定的数据网格
调试时,我无法向DataGrid添加行 设置:我有一个XML文件(C:\test.XML),用作DataGrid的XmlDataProvider XAML:C# WPF将行添加到XML绑定的数据网格,c#,xml,wpf,vb.net,datagrid,C#,Xml,Wpf,Vb.net,Datagrid,调试时,我无法向DataGrid添加行 设置:我有一个XML文件(C:\test.XML),用作DataGrid的XmlDataProvider XAML: <Window x:Class="iDraft.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height
<Window x:Class="iDraft.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="185" Width="176">
<Grid>
<Grid.DataContext>
<XmlDataProvider x:Name="myData" XPath="Table/ENTRY" />
</Grid.DataContext>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Text" Binding="{Binding XPath=text, Mode=TwoWay}"/>
<DataGridTemplateColumn Header="Combobox">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Text="{Binding XPath=combo, Mode=TwoWay}">
<ComboBoxItem>0</ComboBoxItem>
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
namespace iDraft
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
myData.Source = new Uri(@"C:\test.xml");
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<Table>
<ENTRY>
<text>1</text>
<combo>1</combo>
</ENTRY>
<ENTRY>
<text>2</text>
<combo>1</combo>
</ENTRY>
</Table>
XML(test.XML):
<Window x:Class="iDraft.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="185" Width="176">
<Grid>
<Grid.DataContext>
<XmlDataProvider x:Name="myData" XPath="Table/ENTRY" />
</Grid.DataContext>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Text" Binding="{Binding XPath=text, Mode=TwoWay}"/>
<DataGridTemplateColumn Header="Combobox">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Text="{Binding XPath=combo, Mode=TwoWay}">
<ComboBoxItem>0</ComboBoxItem>
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
namespace iDraft
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
myData.Source = new Uri(@"C:\test.xml");
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<Table>
<ENTRY>
<text>1</text>
<combo>1</combo>
</ENTRY>
<ENTRY>
<text>2</text>
<combo>1</combo>
</ENTRY>
</Table>
因为您的
myData.Source
是一个URI,所以它总是只读的。您需要将XML中的数据放入另一个介质(类/数据表),并处理添加/更新和将数据保存回XML格式。因为您的myData.Source
是一个URI,它始终是只读的。您需要将XML中的数据放入另一个介质(类/数据表),并处理添加/更新和将数据保存回XML格式。分辨率:
我去掉了XmlDataProvider,并在XAML中将XPath更改为Path。除此之外,我的后端代码保持不变(vb.net不是C#代码)
唯一需要注意的是绑定路径必须引用XML节点名。解析: 我去掉了XmlDataProvider,并在XAML中将XPath更改为Path。除此之外,我的后端代码保持不变(vb.net不是C#代码)
唯一需要注意的是,绑定路径必须引用XML节点名称。您真的应该为这个编辑开始一个新问题。通过将XML放入数据表,就网格而言,它不再是XML,因此您需要删除XML数据提供程序的内容。您真的应该为此编辑开始一个新问题。通过将XML放入数据表,就网格而言,它不再是XML,因此需要删除XML数据提供者的内容。