Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何显示datagrid中现有的xml文件内容,并且可以编辑和保存_C#_Xml_Wpf_Datagrid - Fatal编程技术网

C# 如何显示datagrid中现有的xml文件内容,并且可以编辑和保存

C# 如何显示datagrid中现有的xml文件内容,并且可以编辑和保存,c#,xml,wpf,datagrid,C#,Xml,Wpf,Datagrid,我还在学习WPF、C#和xml文件。 我有一个包含现有内容的xml文件。 我想做的是: 在datagrid中显示xml文件内容 当xml文件 显示在datagrid中,用户可以编辑内容 在用户编辑 内容,将新数据写入同一xml文件中 但我被困在第一步 我想展示这样的东西(仅示例,而非真实数据): 文件名=设备ID 文件位置=装备Opn 名称=银行标识代码 姓氏=bin描述 电话号码=垃圾箱质量 等等 但问题是,当我运行应用程序时,结果是这样的 以下是我曾经尝试过的: string samp

我还在学习WPF、C#和xml文件。 我有一个包含现有内容的xml文件。 我想做的是:

  • 在datagrid中显示xml文件内容
  • 当xml文件 显示在datagrid中,用户可以编辑内容
  • 在用户编辑 内容,将新数据写入同一xml文件中 但我被困在第一步
  • 我想展示这样的东西(仅示例,而非真实数据):

    • 文件名=设备ID

    • 文件位置=装备Opn

    • 名称=银行标识代码

    • 姓氏=bin描述

    • 电话号码=垃圾箱质量

    等等

    但问题是,当我运行应用程序时,结果是这样的 以下是我曾经尝试过的:

    string sampleXMLFile = FilePath.XmlBinCode;
    DataSet dataSet = new DataSet();
    dataSet.ReadXml(sampleXMLFile);
    DataView dataView = new DataView(dataSet.Tables[0]);
    dataGrid_ConfigurableRejectBinCode.ItemsSource = dataView;
    
    以下是我的xml文件的预览:

    以下是我的XAML预览:

     <DockPanel Background="White">
        <Button Content="Load File" Click="LoadXmlFile_Click" DockPanel.Dock="Top"/>
        <DataGrid x:Name="dataGrid_ConfigurableRejectBinCode"
                  DockPanel.Dock="Bottom"
                  CanUserAddRows="True"
                  CanUserDeleteRows="True"
                  CanUserReorderColumns="False"
                  CanUserResizeColumns="False"
                  CanUserResizeRows="False"
                  CanUserSortColumns="False">
            <DataGrid.Columns>
                <!--<DataGridTextColumn Header="Bin Code" Binding="{Binding BinCode}"/>
                <DataGridTextColumn Header="Bin Description" Binding="{Binding Path=Element[BinDescription].Value}"/>
                <DataGridTextColumn Header="Bin Quality" Binding="{Binding Path=Element[BinQuality].Value}"/>
                <DataGridTextColumn Header="Pick" Binding="{Binding Path=Element[Pick].Value}"/>
                <DataGridTextColumn Header="Vision Station" Binding="{Binding Path=Element[VisionStation].Value}"/>
                <DataGridTextColumn Header="Vision IO" Binding="{Binding Path=Element[VisionIO].Value}"/>-->
            </DataGrid.Columns>
        </DataGrid>
    </DockPanel>
    
    
    
    如何像上面的图片一样显示xml数据,就像我想要的那样?请原谅我的语言,因为英语不是我的母语。
    请帮帮我,谢谢

    我已经找到了展示它的方法,下面是我是如何做到的

    生成类并绑定XAML控件中要显示的所有细节。 这是XAML

    <Grid Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Text="Eqpt ID"/>
        <TextBlock Grid.Row="1" Grid.Column="0" Text="Equip Opn"/>
    
        <TextBox Grid.Row="0" Grid.Column="1" IsReadOnly="True" Text="{Binding EqptID}"/>
        <TextBox Grid.Row="1" Grid.Column="1" IsReadOnly="True" Text="{Binding EquipOpn}"/>
    
        <DataGrid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" x:Name="DataGrid_BinDefinition" 
                  AutoGenerateColumns="False"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  CanUserReorderColumns="False"
                  CanUserResizeColumns="False"
                  CanUserResizeRows="False"
                  CanUserSortColumns="False"
                  HorizontalContentAlignment="Center"
                  ItemsSource="{Binding BinDefinition}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Bin Code" Binding="{Binding BinCode}"/>
                <DataGridTextColumn Header="Bin Description" Binding="{Binding BinDescription}"/>
                <DataGridTextColumn Header="Bin Quality" Binding="{Binding BinQuality}"/>
                <DataGridCheckBoxColumn Header="Pick" Binding="{Binding Pick}"/>
                <mahApps:DataGridNumericUpDownColumn Header="Vision Station" Binding="{Binding VisionStation}" Maximum="3" Minimum="1"/>
                <mahApps:DataGridNumericUpDownColumn Header="Vision IO" Binding="{Binding VisionIO}" Maximum="32" Minimum="1"/>
            </DataGrid.Columns>
        </DataGrid>
    
        <Button Grid.Row="3" Grid.Column="0" x:Name="ButtonAddRow" Content="Add Row" Click="ButtonAddRow_Click"/>
        <Button Grid.Row="3" Grid.Column="1" x:Name="ButtonDeleteRow" Content="Delete Row" Click="ButtonDeleteRow_Click"/>
        <Button Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" x:Name="ButtonSaveFile" Content="Save File" Click="ButtonSaveFile_Click"/>
    </Grid>
    
    
    
    然后是绑定控件的类

     [Serializable]
    public partial class XmlBinDefinitionModel : ViewModelBase
    {
        [XmlElement("EqptID")]
        private string eqptID;
        public string EqptID
        {
            get { return eqptID; }
            set
            {
                if (eqptID != value)
                {
                    eqptID = value;
                    RaisePropertyChanged(nameof(EqptID));
                }
            }
        }
    
        [XmlElement("EquipOpn")]
        private string equipOpn;
        public string EquipOpn
        {
            get { return equipOpn; }
            set
            {
                if (equipOpn != value)
                {
                    equipOpn = value;
                    RaisePropertyChanged(nameof(EquipOpn));
                }
            }
        }
    
        private List<BinDefinitionModel> binDefinition;
        public List<BinDefinitionModel> BinDefinition
        {
            get { return binDefinition; }
            set
            {
                if (binDefinition != value)
                {
                    binDefinition = value;
                    RaisePropertyChanged(nameof(BinDefinition));
                }
            }
        }
    }//end public partial class XmlBinDefinitionModel 
    
    public partial class BinDefinitionModel : ViewModelBase
    {
        [XmlElement("BinCode")]
        private string binCode;
        public string BinCode
        {
            get { return binCode; }
            set
            {
                if (binCode != value)
                {
                    binCode = value;
                    RaisePropertyChanged(nameof(BinCode));
                }
            }
        }
    
        [XmlElement("BinDescription")]
        private string binDescription;
        public string BinDescription
        {
            get { return binDescription; }
            set
            {
                if (binDescription != value)
                {
                    binDescription = value;
                    RaisePropertyChanged(nameof(BinDescription));
                }
            }
        }
    
        [XmlElement("BinQuality")]
        private string binQuality;
        public string BinQuality
        {
            get { return binQuality; }
            set
            {
                if (binQuality != value)
                {
                    binQuality = value;
                    RaisePropertyChanged(nameof(BinQuality));
                }
            }
        }
    
        [XmlElement("Pick")]
        private string pick;
        public string Pick
        {
            get { return pick; }
            set
            {
                if (pick != value)
                {
                    pick = value;
                    RaisePropertyChanged(nameof(Pick));
                }
            }
        }
    
        [XmlElement("VisionStation")]
        private string visionStation;
        public string VisionStation
        {
            get { return visionStation; }
            set
            {
                if (visionStation != value)
                {
                    visionStation = value;
                    RaisePropertyChanged(nameof(VisionStation));
                }
            }
        }
    
        [XmlElement("VisionIO")]
        private string visionIO;
        public string VisionIO
        {
            get { return visionIO; }
            set
            {
                if (visionIO != value)
                {
                    visionIO = value;
                    RaisePropertyChanged(nameof(VisionIO));
                }
            }
        }
    }
    
    [可序列化]
    公共部分类XmlBindDefinitionModel:ViewModelBase
    {
    [XmlElement(“EqptID”)]
    私有字符串eqptID;
    公共字符串设备
    {
    获取{return eqptID;}
    设置
    {
    如果(eqptID!=值)
    {
    eqptID=数值;
    RaisePropertyChanged(设备名称(EqptID));
    }
    }
    }
    [XmlElement(“EquipOpn”)]
    专用字符串设备;
    公共字符串设备
    {
    获取{return equalopn;}
    设置
    {
    if(equalopn!=值)
    {
    equipOpn=值;
    RaisePropertyChanged(设备名称)(OPN));
    }
    }
    }
    私有列表绑定定义;
    公共列表绑定定义
    {
    获取{return binDefinition;}
    设置
    {
    if(binDefinition!=值)
    {
    binDefinition=值;
    RaisePropertyChanged(名称(BinDefinition));
    }
    }
    }
    }//结束公共部分类XmlBindDefinitionModel
    公共部分类BindDefinitionModel:ViewModelBase
    {
    [XmlElement(“BinCode”)]
    私有字符串二进制码;
    公共字符串二进制码
    {
    获取{return binCode;}
    设置
    {
    if(binCode!=值)
    {
    binCode=值;
    RaisePropertyChanged(名称(BinCode));
    }
    }
    }
    [XmlElement(“BindDescription”)]
    私有字符串绑定描述;
    公共字符串BindDescription
    {
    获取{return binDescription;}
    设置
    {
    if(BindDescription!=值)
    {
    BindDescription=值;
    RaisePropertyChanged(名称(BindDescription));
    }
    }
    }
    [XmlElement(“BinQuality”)]
    私人品质;
    公共字符串质量
    {
    获取{return binQuality;}
    设置
    {
    if(binQuality!=值)
    {
    质量=价值;
    RaisePropertyChanged(名称(BinQuality));
    }
    }
    }
    [XmlElement(“Pick”)]
    私用线签;
    公共字符串选取
    {
    获取{return pick;}
    设置
    {
    如果(拾取!=值)
    {
    拾取=值;
    RaisePropertyChanged(名称(拾取));
    }
    }
    }
    [XmlElement(“VisionStation”)]
    私有字符串可视化安装;
    公共字符串VisionStation
    {
    获取{return visionStation;}
    设置
    {
    如果(visionStation!=值)
    {
    visionStation=值;
    RaisePropertyChanged(名称(VisionStation));
    }
    }
    }
    [XmlElement(“VisionIO”)]
    私有字符串visionIO;
    公共字符串VisionIO
    {
    获取{return visionIO;}
    设置
    {
    如果(visionIO!=值)
    {
    visionIO=价值;
    RaisePropertyChanged(名称(VisionIO));
    }
    }
    }
    }
    
    然后是代码隐藏

    XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(FilePath.XmlBinCode); //load the file
                xmlBinDefinitionModel.EqptID = xmlDocument.DocumentElement.SelectSingleNode("EqptID").InnerText;
                xmlBinDefinitionModel.EquipOpn = xmlDocument.DocumentElement.SelectSingleNode("EquipOpn").InnerText;
                xmlBinDefinitionModel.BinDefinition = new List<BinDefinitionModel>();
                XmlNodeList binCodeList = xmlDocument.GetElementsByTagName("BinCode");
                XmlNodeList binDescriptionList = xmlDocument.GetElementsByTagName("BinDescription");
                XmlNodeList binQualityList = xmlDocument.GetElementsByTagName("BinQuality");
                XmlNodeList pickList = xmlDocument.GetElementsByTagName("Pick");
                XmlNodeList visionStationList = xmlDocument.GetElementsByTagName("VisionStation");
                XmlNodeList visionIOList = xmlDocument.GetElementsByTagName("VisionIO");
                for (int i = 0; i < binCodeList.Count; i++)
                {
                    xmlBinDefinitionModel.BinDefinition.Add(new BinDefinitionModel
                    {
                        BinCode = binCodeList[i].InnerText.Remove(0,2),
                        BinDescription = binDescriptionList[i].InnerText,
                        BinQuality = binQualityList[i].InnerText,
                        Pick = pickList[i].InnerText,
                        VisionStation = visionStationList[i].InnerText,
                        VisionIO = visionStationList[i].InnerText
                    });
                }
    
    XmlDocument XmlDocument=new XmlDocument();
    Load(FilePath.XmlBinCode)//加载文件
    xmlBinDefinitionModel.EqptID=xmlDocument.DocumentElement.SelectSingleNode(“EqptID”).InnerText;
    xmlBinDefinitionModel.EquipOpn=xmlDocument.DocumentElement.SelectSingleNode(“EquipOpn”).InnerText;
    xmlBinDefinitionModel.bindeinition=新列表();
    XmlNodeList binCodeList=xmlDocument.GetElementsByTagName(“BinCode”);
    XmlNodeList BindDescriptionList=xmlDocument.GetElementsByTagName(“BindDescription”);
    XmlNodeList binQualityList=xmlDocument.GetElementsByTagName(“BinQuality”);
    XmlNodeList pickList=xmlDocument.GetElementsByTagName(“Pick”);
    XmlNodeList visionStationList=xmlDocument.GetElementsByTagName(“VisionStation”);
    XmlNodeList visionIOList=xmlDocument.GetElementsByTagName(“VisionIO”);
    for(int i=0;i