Question

I have a problem about x++. my method in axapta returns container but I want to convert this container to datatable in .net.

Was it helpful?

Solution

public static DataTable createDataTableFromContainer(string dtName, AxaptaContainer container, ArrayList columnNames, List<Type> columnTypes, bool allTypeString)
{
    DataTable dt = new DataTable(dtName);
    for (int i = 0; i < columnNames.Count; i++)
    {
        dt.Columns.Add(columnNames[i].ToString(), allTypeString ? typeof(System.String) : columnTypes[i]);
    }
    int itemCount = container.Count;
    if (itemCount > 0)
    {
        if (container.getItem(1) is AxaptaContainer)
        {
            for (int i = 1; i <= itemCount; i++)
            {
                AxaptaContainer c = (AxaptaContainer)container.getItem(i);

                DataRow dr = dt.NewRow();
                for (int k = 1; k <= columnNames.Count; k++)
                {
                    if (c.getItem(k).ToString() == "mM")
                    {
                        dr[k - 1] = "";
                    }
                    else
                    {
                        if (dt.Columns[k - 1].DataType == typeof(DateTime))
                        {
                            if (c.getItem(k).GetType() == typeof(string))
                            {
                                if (c.getItem(k).ToString() != "")
                                {
                                    DateTime dummydate;
                                    if (DateTime.TryParse(c.getItem(k).ToString(), out dummydate))
                                    {
                                        dr[k - 1] = dummydate;
                                    }
                                }
                            }
                            else
                            {
                                dr[k - 1] = c.getItem(k);
                            }

                        }
                        else
                        {
                            dr[k - 1] = c.getItem(k);
                        }
                    }
                }
                dt.Rows.Add(dr);
            }
        }
        else 
        {
            DataRow dr = dt.NewRow();
            for (int k = 1; k <= columnNames.Count; k++)
            {
                dr[k - 1] = container.getItem(k);
            }
            dt.Rows.Add(dr);
        }
    }
    return dt;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top