1

当我调试时,我无法在我的 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="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>

C#:

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 (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>

我挖掘了一些旧的 vb.net 代码,发现以下内容:

Imports System.Xml
Imports System.Data

Class MainWindow
 Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

    Dim xmlFile As XmlReader
    Dim ds As New DataSet

    xmlFile = XmlReader.Create("C:\test.xml", New XmlReaderSettings())

    ds.ReadXml(xmlFile)

    xmlFile.Close()

    myData.Source = ds.Tables(0)

  End Sub
End Class
4

2 回答 2

1

因为 yourmyData.Source是一个 URI,所以它始终是只读的。您将需要将 XML 中的数据放入另一个介质(类/数据表)并处理添加/更新数据并将数据保存回 XML 格式。

于 2013-10-22T18:59:32.610 回答
0

解决方案: 我摆脱了 XmlDataProvider 并将 XPath 更改为 XAML 中的路径。除此之外,我的后端代码保持不变(vb.net 不是 C# 代码)。

唯一需要注意的是绑定路径必须引用 XML 节点名称。

于 2013-10-23T12:20:01.133 回答