G'day

I have got a grid that when row selected the contents of that row and of the child table write to a cached datatable then to hashtable then to XML all on button click..

the problem it was writing Flat XML where i need hierarchical XML

here is my code

<code>public partial class _Default : System.Web.UI.Page
{
    private static DataSet dataSet;
   
    protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dataTable = new DataTable("Projects");
        DataColumn column;
        column = new DataColumn();
        column.DataType = Type.GetType("System.Int32");
        column.ColumnName = "ProjectID";
        column.ReadOnly = true;
        column.Unique = true;
        dataTable.Columns.Add("ProjectFileCode");
        dataTable.Columns.Add("ProjectID");
        dataTable.Columns.Add("Name_First");
        dataTable.Columns.Add("Name_Last");
        dataTable.Columns.Add("Mailing_Name");
        dataTable.Columns.Add("Name_LegalTrading");
        dataTable.Columns.Add("Postal_Address");
        dataTable.Columns.Add("MailingLocation");
        dataTable.Columns.Add("Agreement Number");
        dataTable.Columns.Add("Commencement_Date");
        dataTable.Columns.Add("Completion_Date_for_Onground_Works");
        dataTable.Columns.Add("Agreement_Termination_Date");
        dataTable.Columns.Add("Total_Project_Cost");
        dataTable.Columns.Add("CMA_Contribution_$");
        dataTable.Columns.Add("Property_Name");
        dataTable.Columns.Add("Locality");
        dataTable.Columns.Add("Legal_Land_Owner");
        dataTable.Columns.Add("Total_Property_Size_Hectares");
        dataTable.Columns.Add("LGA");
        dataTable.Columns.Add("CMA_Sub-Region_Area");
        dataTable.Columns.Add("Applicant_Contribution_$");
        dataTable.Columns.Add("Incentive_Round_Number");
        dataTable.Columns.Add("Project_Area");
        dataTable.Columns.Add("Phone_Business");
        dataTable.Columns.Add("Mobile_Business");
        dataTable.Columns.Add("Email_Business");
        dataTable.Columns.Add("Fax_Business");
        dataTable.Columns.Add("Phone_Private");

        DataColumn[] PrimaryKeyColumns = new DataColumn[1];
        PrimaryKeyColumns[0] = dataTable.Columns["ProjectID"];
        dataTable.PrimaryKey = PrimaryKeyColumns;

        dataSet = new DataSet();
        dataSet.Tables.Add(dataTable);
   
        dataTable = new DataTable("Activities");

        column = new DataColumn();
        column.DataType = Type.GetType("System.Int32");
        column.ColumnName = "ActivityID";
        column.AutoIncrement = true;
        column.Caption = "ID";
        column.ReadOnly = false;
        column.Unique = true;
        dataTable.Columns.Add("ProjectID");
        dataTable.Columns.Add("ActivityID");
        dataTable.Columns.Add("ActivityType");
        dataTable.Columns.Add("MeasureNumber");
        dataTable.Columns.Add("Unit_Name");
        dataTable.Columns.Add("Unit_Abbreviation");

        DataColumn parentColumn = dataSet.Tables["Projects"].Columns["ProjectID"];
        DataColumn childColumn = dataSet.Tables["Activities"].Columns["ProjectID"];
        DataRelation relation = new DataRelation("parent2Child", parentColumn, childColumn);
        dataSet.Tables["Activities"].ParentRelations.Add(relation);

        dataTable = new DataTable();

        foreach (GridDataItem gridDataItem in RadGrid1.SelectedItems)
        {
            Hashtable hashtable = new Hashtable();
            gridDataItem.ExtractValues(hashtable);

            DataRow dataRow = dataTable.NewRow();
            foreach (DictionaryEntry entry in hashtable)
            {
                dataRow[entry.Key.ToString()] = entry.Value;
            }
            dataTable.Rows.Add(dataRow);
        }

        if (dataTable.Rows.Count > 0)
        {
            dataTable.WriteXml(Server.MapPath("~/Xml") + "\\Test_Water_Gully_Stabilsation.xml");
        }

    }
</code>