// method to save app part data to web service
        public int SaveAppPartDataWeb(AppPart appPart)
        {
            int retval = 0;

            if (this._appPartUtils.SaveAppPartDataToWeb(appPart.AppPartID) == 0)
            {
                this._appPartUtils.UpdateSentToWebStatus(appPart.AppPartID);
            }
            else
            {
                retval = 1;
            }

            if (retval == 1)
            {
                System.Windows.Forms.MessageBox.Show("Error sending data to web service.",
                    "Error",
                    System.Windows.Forms.MessageBoxButtons.OK,
                    System.Windows.Forms.MessageBoxIcon.Exclamation,
                    System.Windows.Forms.MessageBoxDefaultButton.Button1);
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("Data sent to web successfully.",
                    "Success",
                    System.Windows.Forms.MessageBoxButtons.OK,
                    System.Windows.Forms.MessageBoxIcon.None,
                    System.Windows.Forms.MessageBoxDefaultButton.Button1);
            }
            return retval;
        }
        // method to return an arraylist of app parts from JSON delivered by ClayUI web service
        public List<AppPart> GetAppParts()
        {
            List<AppPart> appParts = new List<AppPart>();

            try
            {
                JArray array = JArray.Parse(GetWebServiceData(this._uri));

                // loop through array, pull JSON objects out and push the values into App Part objects
                for (int i = 0; i < array.Count; i++)
                {
                    JObject jObject = JObject.Parse(array[i].ToString());
                    AppPart appPart = new AppPart(int.Parse(jObject["AppPartID"].ToString().Replace("\"", "")),
                        jObject["AppPartName"].ToString().Replace("\"", ""),
                        int.Parse(jObject["Version"].ToString().Replace("\"", "")));

                    // add to arraylist
                    appParts.Add(appPart);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return appParts;
        }
        public MainForm()
        {
            InitializeComponent();

            // instantiate ClayUI AppBase
            appBase = new ClayUIAppBase(1, BASE_URI_INTERNET);

            // instantiate app parts
            contactsAppPart = appBase.GetAppPart(1);
            productsAppPart = appBase.GetAppPart(2);

            // fetch app part elements
            contactsAppPart.FetchElements();
            contactsAppPart.RefreshPanel(this.contactsPanel);
            productsAppPart.FetchElements();
            productsAppPart.RefreshPanel(this.productsPanel);
        }
 // method to save the app part data
 public void SaveAppPartDataLocal(AppPart appPart, FlowLayoutPanel layout)
 {
     this._appPartUtils.SaveAppPartDataLocal(appPart.AppPartName, layout);
 }
        /**
         * Methods for handling reading/writing to app part tables
         **/
        // method to add an app part record to database
        public AppPart CreateAppPart(int appPartID, string appPartName, int version)
        {
            using (this._conn = new SqlCeConnection(this._dbHelper.DatabaseConnStr))
            {
                try
                {
                    this._conn.Open();
                    SqlCeDataAdapter adp = new SqlCeDataAdapter();
                    SqlCeCommand cmd = this._conn.CreateCommand();
                    cmd.CommandText = "INSERT INTO " + AppPartDatabaseHelper.TABLE_NAME + " (" +
                        AppPartDatabaseHelper.COLUMN_ID + ", " +
                        AppPartDatabaseHelper.COLUMN_APP_PART_NAME + ", " +
                        AppPartDatabaseHelper.COLUMN_VERSION + ") VALUES (" +
                        "@" + AppPartDatabaseHelper.COLUMN_ID + ", " +
                        "@" + AppPartDatabaseHelper.COLUMN_APP_PART_NAME + ", " +
                        "@" + AppPartDatabaseHelper.COLUMN_VERSION + ")";
                    SqlCeParameter p_id = cmd.Parameters.Add("@" + AppPartDatabaseHelper.COLUMN_ID, SqlDbType.Int);
                    p_id.Value = appPartID;
                    SqlCeParameter p_appPartName = cmd.Parameters.Add("@" + AppPartDatabaseHelper.COLUMN_APP_PART_NAME, SqlDbType.NVarChar);
                    p_appPartName.Value = appPartName;
                    SqlCeParameter p_version = cmd.Parameters.Add("@" + AppPartDatabaseHelper.COLUMN_VERSION, SqlDbType.Int);
                    p_version.Value = version;
                    adp.InsertCommand = cmd;

                    DataSet ds = new DataSet();
                    adp.Fill(ds);

                    DataTable table = ds.Tables[0];
                    DataRow row = table.Rows[0];
                    AppPart appPart = DataRowToAppPart(row);
                    ds.Dispose();
                    return appPart;
                }
                catch (Exception e)
                {
                    AppPart appPart = new AppPart(0, "NULL", 0);
                    Console.WriteLine(e.Message);
                    return appPart;
                }
            }
        }
        // method to return an app part object
        public AppPart GetAppPart(int appPartID)
        {
            using (this._conn = new SqlCeConnection(this._dbHelper.DatabaseConnStr))
            {
                try
                {
                    this._conn.Open();
                    SqlCeDataAdapter adp = new SqlCeDataAdapter();
                    SqlCeCommand cmd = this._conn.CreateCommand();
                    cmd.CommandText = "SELECT " + AppPartDatabaseHelper.COLUMN_ID + ", " +
                        AppPartDatabaseHelper.COLUMN_APP_PART_NAME + ", " +
                        AppPartDatabaseHelper.COLUMN_VERSION + " FROM " +
                        AppPartDatabaseHelper.TABLE_NAME + " WHERE " +
                        AppPartDatabaseHelper.COLUMN_ID + " = " + appPartID;
                    adp.SelectCommand = cmd;

                    DataSet ds = new DataSet();
                    adp.Fill(ds);

                    DataTable table = ds.Tables[0];
                    DataRow row = table.Rows[0];
                    AppPart appPart = DataRowToAppPart(row);

                    ds.Dispose();
                    return appPart;
                }
                catch (Exception e)
                {
                    AppPart appPart = new AppPart(0, "NULL", 0);
                    Console.WriteLine(e.Message);
                    return appPart;
                }
            }
        }
        // method to return a list array of appPart objects
        public List<AppPart> GetAllAppParts()
        {
            List<AppPart> appParts = new List<AppPart>();

            using (this._conn = new SqlCeConnection(this._dbHelper.DatabaseConnStr))
            {
                try
                {
                    this._conn.Open();
                    SqlCeDataAdapter adp = new SqlCeDataAdapter();
                    SqlCeCommand cmd = this._conn.CreateCommand();
                    cmd.CommandText = "SELECT " + AppPartDatabaseHelper.COLUMN_ID + ", " +
                        AppPartDatabaseHelper.COLUMN_APP_PART_NAME + ", " +
                        AppPartDatabaseHelper.COLUMN_VERSION + " FROM " +
                        AppPartDatabaseHelper.TABLE_NAME;
                    adp.SelectCommand = cmd;

                    DataSet ds = new DataSet();
                    adp.Fill(ds);

                    foreach (DataTable table in ds.Tables)
                    {
                        foreach (DataRow row in table.Rows)
                        {
                            AppPart appPart = DataRowToAppPart(row);
                            appParts.Add(appPart);
                        }
                    }

                    ds.Dispose();
                    return appParts;
                }
                catch (Exception e)
                {
                    AppPart appPart = new AppPart(0, "NULL", 0);
                    appParts.Add(appPart);
                    Console.WriteLine(e.Message);
                    return appParts;
                }
            }
        }
 // method to convert a datarow to an AppPart
 public AppPart DataRowToAppPart(DataRow dr)
 {
     AppPart appPart = new AppPart(int.Parse(dr[0].ToString()), dr[1].ToString(), int.Parse(dr[2].ToString()));
     return appPart;
 }