C# 将阵列数据保存到datagrid和xml

C# 将阵列数据保存到datagrid和xml,c#,arrays,xml,wpf,datagrid,C#,Arrays,Xml,Wpf,Datagrid,我有一个datagrid,它从xml中读取数据,如下所示: public void SaveDataSet() { StoreDbDataSet sdb = new StoreDbDataSet(); sdb.SaveDataSet(_ds); } public void SaveDataSet(DataSet ds) { ds.WriteXmlSchema(DatabaseConstructorName)

我有一个datagrid,它从xml中读取数据,如下所示:

    public void SaveDataSet()
    {
        StoreDbDataSet sdb = new StoreDbDataSet();
        sdb.SaveDataSet(_ds);
    }

    public void SaveDataSet(DataSet ds)
    {
        ds.WriteXmlSchema(DatabaseConstructorName);
        ds.WriteXml(DatabaseFileName);
        ds.AcceptChanges();
    }
Xml到数据集:

    public DataSet GetModules()
    {
        DataSet ds = StoreDbDataSet.ReadDataSet();

        ObservableCollection<Module> modules = new ObservableCollection<Module>();
        foreach (DataRow moduleRow in ds.Tables["Modules"].Rows)
        {
            modules.Add(new Module(moduleRow["ModelNumber"].ToString(), moduleRow["ParamName"].ToString(),
                    (UInt16)moduleRow["ParamValue"], (UInt16)moduleRow["DefaultValue"], (UInt16)moduleRow["MaxValue"],
                    (UInt16)moduleRow["MinValue"], (uint)moduleRow["Address"]));
        }
        return StoreDbDataSet.ReadDataSet();
    }
当我更改datagrid中的值时,我将更改保存为xml,如下所示:

    public void SaveDataSet()
    {
        StoreDbDataSet sdb = new StoreDbDataSet();
        sdb.SaveDataSet(_ds);
    }

    public void SaveDataSet(DataSet ds)
    {
        ds.WriteXmlSchema(DatabaseConstructorName);
        ds.WriteXml(DatabaseFileName);
        ds.AcceptChanges();
    }
问题:现在我有了一个数组,我想将数组中的数据保存到datagrid,我该怎么做

编辑:

    public void ArrayToDatagrid()
    {
        StoreDb sdb = new StoreDb();
        var temp = sdb.GetModulesFilteredWithLinq(selectedProduct.ModelNumber).ToArray();
        for (int i = 0; i < dgConfig.Items.Count; i++)
        {

            DataRow newModuleRow = _ds.Tables["Modules"].NewRow();
            newModuleRow["ModelNumber"] = temp[i].ModelNumber;
            newModuleRow["ParamName"] = temp[i].ParamName;
            newModuleRow["ParamValue"] = readRegisters[i];
            newModuleRow["DefaultValue"] = temp[i].DefaultValue;
            newModuleRow["MaxValue"] = temp[i].MaxValue;
            newModuleRow["MinValue"] = temp[i].MinValue;
            newModuleRow["Address"] = temp[i].Address;

            _ds.Tables["Modules"].Rows.Add(newModuleRow);
        }
    }
public void ArrayToDatagrid()
{
StoreDb sdb=新的StoreDb();
var temp=sdb.GetModulesFilteredWithLinq(selectedProduct.ModelNumber.ToArray();
对于(int i=0;i
由于我非常熟悉您的代码(来自前面的问题),我将尝试帮助您:

您可以在
RefreshModules()
中将数据直接添加到数据集中,然后将其保存到xml中。但是,您应该找到一种不添加重复数据的方法,否则它会一次又一次地添加相同的数据

private void RefreshModules()
{
    _ds = sdb.GetModules();
    for (int i = 0; i < tempArray.Length; i++)
    {
        DataRow newModuleRow = _ds.Tables["Modules"].NewRow();
        newModuleRow[Address] = "your address from other data";
        newModuleRow[ParamValue] = tempArray[i];
        newModuleRow[ParamName] = "your param name";
        ... 
        //use the same syntax to add all the required parameters of a Module structure

        _ds.Tables["Modules"].Rows.Add(newModuleRow);
    }
    _ds.Tables["Modules"].DefaultView.Sort = "Address";
    ModulesView = new ListCollectionView(_ds.Tables["Modules"].DefaultView)
    {
        Filter = obj =>
        {
            var Module = obj as DataRowView;
            return SelectedProduct != null && SelectedProduct.ModelNumber == Module["ModelNumber"].ToString();
        }
    };
}
private void RefreshModules()
{
_ds=sdb.GetModules();
for(int i=0;i
{
var模块=obj作为DataRowView;
返回SelectedProduct!=null&&SelectedProduct.ModelNumber==Module[“ModelNumber”].ToString();
}
};
}
如果是一次性添加,则可以在运行一次后删除for循环,否则可以将其放入函数中,并仅在需要时调用它


或者,您可以在添加之前检查datatable中是否存在“行”(例如,检查paramvalue是否已经存在等)。

从其他设备获得的数据的格式是什么?了解数组的确切含义也会很有帮助(您有数组格式的数据吗?)。我想做的是:我有一个datagrid,它从xml文件中填充多个数据,例如
ParamName
ParamNumber
ParamValue
Address
。。。因此,当我从其他设备获取协议数据时,我可能只获取与
地址
相对应的
参数值
,因此我可能会将数据保存回xml,不仅这两个参数,而且是
模块
的完整结构,希望我能让您明白这一点!我认为这是相当清楚的,如果您知道为其余模块参数添加什么,您可以在
newModuleRow[ParamValue]=tempArray[I]之后添加更多行
,例如
newModuleRow[ParamNumber]=“something”
newModuleRow[ParamName]=“something other”,等等。上面的编辑代码通过创建另一个表模块来实现,因此当我
刷新模块()
为每个模块填充两行数据时,我认为这是因为
\u ds.Tables[“Modules”].rows.Add(newModuleRow)
您知道如何修复此问题以修改现有表而不是创建新表吗?谢谢!