Deserialize DatagridView



I am trying to deserialize from an xml file to a datagridview, but I think I did something wrong. VS is throwing a System Invalid Operation Exception on (2,2). Can somebody tell me what I did wrong here?


results.xml



<?xml version="1.0" encoding="utf-8"?>
<DataTable>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://ift.tt/tphNwY" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="data" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="col1" type="xs:string" minOccurs="0" />
<xs:element name="col2" type="xs:string" minOccurs="0" />
<xs:element name="col3" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DocumentElement>
<data diffgr:id="data1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<col1>r1c1</col1>
<col2>r1c2</col2>
<col3>r1c3</col3>
</data>
<data diffgr:id="data2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
<col1>r1c2</col1>
<col2>r1c2</col2>
<col3>r1c2</col3>
</data>
</DocumentElement>
</diffgr:diffgram>
</DataTable>


Deserialization code:



public void loadXMLfile()//runs on application start
{
UserCollection users = null;

XmlSerializer serializer = new XmlSerializer(typeof(UserCollection));

StreamReader reader = new StreamReader(filePath);
users = (UserCollection)serializer.Deserialize(reader);
reader.Close();
// finally bind the data to the grid
dg1.DataSource = users.User;
}

[Serializable()]
public class DeserializeData
{
[System.Xml.Serialization.XmlElement("col1")]
public string col1 { get; set; }

[System.Xml.Serialization.XmlElement("col2")]
public string col2 { get; set; }

[System.Xml.Serialization.XmlElement("col3")]
public string col3 { get; set; }
}

[Serializable()]
[System.Xml.Serialization.XmlRoot("DocumentElement")]
public class UserCollection
{
[XmlArray("data")]
[XmlArrayItem("data", typeof(DeserializeData))]
public DeserializeData[] User { get; set; }
}


serialize code (button):



private void saveDatagrid_Click(object sender, EventArgs e)
{
XmlSerializer ser = new XmlSerializer(typeof(DataTable));
DataTable dt = new DataTable("data");

dt.Columns.Add("col1");//I will just iterate through the datagridview to populate a row when the code works correctly
dt.Columns.Add("col2");
dt.Columns.Add("col3");
string[] row = { "r1c1", "r1c2", "r1c3" };
string[] row1 = { "r2c1", "r2c2", "r2c3" };
dt.Rows.Add(row);
dt.Rows.Add(row1);
TextWriter writer = new StreamWriter(filePath);
ser.Serialize(writer, dt);
writer.Close();
}

No comments:

Post a Comment