如何在asp数据网格后面的代码中添加wpf datagrid中的行是否使用Xml文件进行绑定?

时间:2015-04-20 13:38:02

标签: c# xml wpf datagrid

我使用Xml文件使用以下代码加载Wpf Datagrid

 <Window.Resources>
    <XmlDataProvider x:Key="FilterData" 
        Source="E:/WPF12/Main27-02-15/IntelligraphicsSniffer24-2-15/Intelligraphics Sniffer/Resources/XMLFile2.xml" XPath="NewDataSet"/>
</Window.Resources>


    <DataGrid x:Name="AddFilterDataGrid" Height="220" GridLinesVisibility="None"  DataContext="{StaticResource FilterData }" AutoGenerateColumns="False"
                                 ItemsSource="{Binding XPath=Filter}" >


                            <DataGrid.Columns>
                                <DataGridTextColumn 
                Header="Name" 
                Binding="{Binding XPath=name}"/>
                                <DataGridTextColumn 
                Header="filter0" 
                Binding="{Binding XPath=filter0}"/>
                                <DataGridTextColumn 
                Header="filter1" 
                Binding="{Binding XPath=filter1}" Visibility="Hidden" />
                            </DataGrid.Columns> </DataGrid>

示例xml文件是:

&#13;
&#13;
<NewDataSet>
  <Filter>
    <name>one</name>
    <filter0>12</filter0>
    <filter1>15</filter1>
  </Filter>
  <Filter>
    <name>sathish </name>
    <filter0>999</filter0>
    <filter1>robo</filter1>
  </Filter>
  </NewDataSet>
&#13;
&#13;
&#13;

加载表单后,wpf datagrid将加载xml文件。它工作正常。但我的要求是在单击按钮后将行添加到代码中的数据网格。

我为按钮点击事件编写了如下代码

  public void Addfilterrow(string filname,string comments,string src,string dst)
    {
        AddFilterDataGrid.Items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
    }

类AddfilterRow是:

  public class AddfilterRow
    {
        public string filtername { get; set; }
        public UInt16 filter0 { get; set; }
        public UInt16 filter1 { get; set; }  }

如果我使用此代码,我会收到类似的异常&#34;当ItemsSource正在使用时,操作无效。使用ItemsControl.ItemsSource访问和修改元素&#34;

可以建议我一个解决方案吗?

谢谢你, Sathish所在。

1 个答案:

答案 0 :(得分:0)

public void Addfilterrow(string filname,string comments,string src,string dst)
{
    AddFilterDataGrid.Items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
}

根据microsoft文档here,Items是ReadOnly属性。您应该使用ItemsSource。

[编辑] 根据您的评论编辑回答。 ItemsSource是一个IEnumerable,因此要么将项目添加到te集合中,要么创建一个新集合。

public void Addfilterrow(string filname,string comments,string src,string dst)
{
    ICollection<AddFilterRow> items = AddFilterDataGrid.ItemsSource as ICollection<AddFilterRow> ;

    if(items==null)
       return;

    items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
    AddFilterDataGrid.ItemsSource = items
}