C# 将阵列数据保存到datagrid和xml
我有一个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)
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)
您知道如何修复此问题以修改现有表而不是创建新表吗?谢谢!