如何向DataGrid添加行?

时间:2015-02-06 10:08:03

标签: c# wpf datagrid xmldataprovider

我有一个编辑XML文件的小程序。我使用XMLDataProvider:

<Grid.DataContext>
    <XmlDataProvider x:Name="XMLData" Source="/database/stroyka1.bas" XPath="JobArray/job"/>
</Grid.DataContext>

和DataGrid:

<DataGrid 
    Name="JobsDataGrid" 
    ItemsSource="{Binding}"
    AutoGenerateColumns="false" Height="Auto" Width="Auto"
    IsReadOnly="False" CanUserAddRows="True">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding XPath=id, Mode=TwoWay}" />
        <DataGridTextColumn Header="Название" Binding="{Binding XPath=name, Mode=TwoWay}" />
        <DataGridTextColumn Header="Цена за единицу" Binding="{Binding XPath=price, Mode=TwoWay}"/>
        <DataGridTextColumn Header="Единица измерения" Binding="{Binding XPath=measure, Mode=TwoWay}"/>
    </DataGrid.Columns>
</DataGrid>

如何在表格下方启用空白行? CanUserAddRow=trueIsReadOnly=false不起作用。我尝试向DataGrid添加带空白参数的行,但有错误:

  

使用ItemsSource时不允许操作。相反,使用ItemsControl.ItemsSource访问和修改元素。

2 个答案:

答案 0 :(得分:0)

Here是解释。 ItemsSource集合必须实现一些接口才能工作。

答案 1 :(得分:0)

非常感谢,但我找到了方法,但我对这个问题表示不满。我使用这段代码:

private void AddNewRowMenuItem_OnClick(object sender, RoutedEventArgs e)
    {
        job pipainput = new job(JobsDataGrid.Items.Count+1,"",0,"");
        XmlSerializer xmls = new XmlSerializer(typeof(job));
        var sb = new StringBuilder(512);

        using (System.IO.StringWriter sw = new System.IO.StringWriter(sb))
            {
                xmls.Serialize(sw, pipainput);
            }

        XmlDocument xmlk = new XmlDocument();
        xmlk.LoadXml(sb.ToString());

        XmlNode pipa = XMLData.Document.ImportNode(xmlk.ChildNodes[1], true);
        XMLData.Document.DocumentElement.AppendChild(pipa);
    }    

当工作 - 我的班级。效果很好。