private void btnOk_Click(object sender, EventArgs e)
        {
            Greske = "";
            var properties = myInterface.GetType().GetProperties();

            //String za dodavanje imena polja koja su obavezna a nisu popunjena

            foreach (var item in flowPanel.Controls)
            {
                try
                {
                    string value = "";

                    if (item.GetType() == typeof(InputControl))
                    {
                        InputControl input = item as InputControl;
                        value = input.GetValueFromTextBox();

                        //provjera da li unosimo model vozila koji vec postoji u bazi podataka
                        if (properties[0].Name == "ModelID" && properties[01].Name == "Naziv")
                        {
                            PropertyModelVozila propertyModelVozila = new PropertyModelVozila();
                            SqlDataReader       reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                                                 propertyModelVozila.GetSelectQueryZaModelVozila());
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    if (reader.GetString(0) == value)
                                    {
                                        DialogResult dr = MetroMessageBox.Show(this, $"\n\nError! Model vec postoji u bazi", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                                        return;
                                    }
                                }
                            }
                        }
                        else if (properties[0].Name == "ProizvodjacID" && properties[01].Name == "Naziv")
                        {
                            PropertyProizvodjac propertyModelVozila = new PropertyProizvodjac();
                            SqlDataReader       reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                                                 propertyModelVozila.GetSelectQueryZaModelVozila());
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    if (reader.GetString(0) == value)
                                    {
                                        DialogResult dr = MetroMessageBox.Show(this, $"\n\nError! Model vec postoji u bazi", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                                        return;
                                    }
                                }
                            }
                        }

                        string ImePolja = properties.Where(x => (item as InputControl).Name == x.Name).FirstOrDefault().GetCustomAttribute <DisplayNameAttribute>().DisplayName;
                        if (properties.Where(x => (item as InputControl).Name == x.Name &&
                                             x.GetCustomAttribute <NotRequiredAttribute>() != null).FirstOrDefault() == null && value == "")
                        {
                            Greske += "Polje \"" + ImePolja + "\" ne smije biti prazno!\n";
                            continue;
                        }
                        else
                        {
                            if (Regex.IsMatch(value, @"^[0-9]{3}[//]{1}[0-9]{3}[/-]{1}[0-9]{3}$") == false && (item as InputControl).Name == "BrojTelefon")
                            {
                                Greske += "Polje \"" + ImePolja + "\" ne smije da sadrzi slova i znakove osim '-' i '/'!\n";
                                continue;
                            }
                            else if (Regex.IsMatch(value, @"^[a-zA-Z]+$") == false &&
                                     ((item as InputControl).Name == "Ime" ||
                                      (item as InputControl).Name == "Prezime" ||
                                      (item as InputControl).Name == "Gorivo" ||
                                      (item as InputControl).Name == "Boja"))
                            {
                                Greske += "Polje \"" + ImePolja + "\" ne smije da sadrzi brojeve i znakove!\n";
                                continue;
                            }
                            else if (Regex.IsMatch(value, @"^[0-9]{13}$") == false &&
                                     (item as InputControl).Name == "JMB")
                            {
                                Greske += "Polje \"" + ImePolja + "\" mora da sadrzi samo 13 brojeva!\n";
                                continue;
                            }
                            else if (Regex.IsMatch(value, @"^[2-5]{1}$") == false &&
                                     (item as InputControl).Name == "BrojVrata")
                            {
                                Greske += "Polje \"" + ImePolja + "\" mora da sadrzi jednu cifru od 2 do 5!\n";
                                continue;
                            }
                            else if (Regex.IsMatch(value, @"^[0-9\.]+$") == false &&
                                     (item as InputControl).Name == "Kilometraza")
                            {
                                Greske += "Polje \"" + ImePolja + "\" ne smije da sadrzi slova i znakove!\n";
                                continue;
                            }
                            else if ((item as InputControl).Name == "BrojRegistracije" && Regex.IsMatch(value, @"^[A-Z0-9]{3}[\-]{1}[A-Z]{1}[\-]{1}[0-9]{3}$") == false)
                            {
                                Greske += "Polje \"" + ImePolja + "\" nije u pravilnom formatu!\n";
                                continue;
                            }
                        }

                        PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                    }
                    else if (item.GetType() == typeof(InputDateControl))
                    {
                        InputDateControl input = item as InputDateControl;
                        value = input.GetValueFromDateBox();

                        PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                    }
                    else if (item.GetType() == typeof(LookUpControl))
                    {
                        LookUpControl input = item as LookUpControl;
                        value = input.GetKeyValue();

                        if (value == "")
                        {
                            Greske += "Polje \"" + (item as LookUpControl).Name + "\" ne smije biti prazno!\n";
                            continue;
                        }

                        PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                    }
                    else if (item.GetType() == typeof(TwoRadioButtonsControl))
                    {
                        TwoRadioButtonsControl input = item as TwoRadioButtonsControl;
                        value = input.GetChecked();

                        PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                    }
                    else if (item.GetType() == typeof(ComboBoxControl))
                    {
                        ComboBoxControl input = item as ComboBoxControl;
                        value = input.GetText();

                        PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                    }
                }
                catch (Exception)
                {
                    DialogResult dr = MetroMessageBox.Show(this, "Neocekivana greska!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            if (Greske != "")
            {
                DialogResult dr = MetroMessageBox.Show(this, Greske, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //Provjera poziva Input forme
            if (state == StateEnum.Create)
            {
                DialogResult myResult = MetroMessageBox.Show(this, "Uspjesno ste dodali novi item", "Uspjesno", MessageBoxButtons.OK, MessageBoxIcon.Information);
                if (myResult == DialogResult.OK)
                {
                    SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                              myInterface.GetInsertQuery(), myInterface.GetInsertParameters().ToArray());

                    if (myInterface.GetType() == typeof(PropertyVozilo))
                    {
                        PropertyCijena pomCijena = new PropertyCijena();

                        SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                  pomCijena.GetInsertQuery());
                    }
                    CRUD.IstorijaCRUD.Istorija(userEmail, StateEnum.Create, myInterface);
                }
            }
            else if (state == StateEnum.Update)
            {
                DialogResult myResult = MetroMessageBox.Show(this, "Da li zelite izvrsiti azuriranje ?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (myResult == DialogResult.Yes)
                {
                    SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                              myInterface.GetUpdateQuery(), myInterface.GetUpdateParameters().ToArray());


                    CRUD.IstorijaCRUD.Istorija(userEmail, StateEnum.Update, myInterface);
                }
            }

            DialogResult = DialogResult.OK;
        }
        //Popunjavanje Data Table
        #region PopunjavanjeDataTable
        private void PopulateGrid()
        {
            panelPanelZaGV.Controls.Clear();
            DataTable dt = new DataTable();

            //logika za popunjavanje datatable

            SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                           myProperty.GetSelectQuery());


            if (myProperty.GetType() == typeof(PropertyOsoba))
            {
                PropertyOsoba pom = myProperty as PropertyOsoba;
                reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                 pom.GetSelectQueryRadnik());
            }

            if (myProperty.GetType() == typeof(PropertyKlijent))
            {
                PropertyKlijent pom = myProperty as PropertyKlijent;
                reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                 pom.GetSelectQueryZaFakturu());
            }

            if (myProperty.GetType() == typeof(PropertyModelVozila))
            {
                PropertyModelVozila pom = myProperty as PropertyModelVozila;
                reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                 pom.GetSelectLookUp());
            }


            dt.Load(reader);
            reader.Close();

            dgv.DataSource      = dt;
            dgv.BackgroundColor = Color.White;
            dgv.HeaderBgColor   = Color.CadetBlue;
            panelPanelZaGV.Controls.Add(dgv);
            dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgv.MultiSelect   = false;
            dgv.Dock          = DockStyle.Fill;
            dgv.Size          = panelPanelZaGV.Size;

            //izvuci display name
            var type       = myProperty.GetType();
            var properties = type.GetProperties();

            try
            {
                //promjeniti nazive kolona
                foreach (DataGridViewColumn item in dgv.Columns)
                {
                    item.HeaderText = properties.Where(x => x.GetCustomAttributes <SqlNameAttribute>()
                                                       .FirstOrDefault().Name == item.HeaderText).FirstOrDefault()
                                      .GetCustomAttributes <DisplayNameAttribute>().FirstOrDefault().DisplayName;
                }
            }
            catch { }

            //design
            //boja teksta i pozadina kada selektujemo item
            dgv.DefaultCellStyle.SelectionBackColor = Color.FromArgb(44, 46, 62);
            dgv.DefaultCellStyle.SelectionForeColor = Color.WhiteSmoke;
            //boja header teksta u tabeli
            dgv.ColumnHeadersDefaultCellStyle.ForeColor = Color.WhiteSmoke;
        }