private void button1_Click(object sender, EventArgs e)
        {
            productItems.Clear();
            materialItems.Clear();

            Compositions compositions = new Compositions(SQL);
            Products products = new Products(SQL);
            List<Product> allProducts = products.getList();

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if ((row.Cells[0].Value == null) || (row.Cells[1].Value == null))
                    continue;

                Product p = allProducts.Where(a => row.Cells[0].Value.ToString() == a.ToString()).First<Product>();

                int amount = 0;
                if (!int.TryParse(row.Cells[1].Value.ToString(), out amount))
                {
                    row.Cells[1].ErrorText = "Zadaná hodnota není číslo!";
                    return;
                }
                row.Cells[1].ErrorText = "";
                List<Composition> c = compositions.getList(p.ID);
                c.ForEach(a=>{
                    MaterialUnitPair pair = new MaterialUnitPair(a.MaterialType, a.Unit);
                    if(materialItems.ContainsKey(pair)){
                        materialItems[pair] += a.Amount * amount;
                    }
                    else{
                        materialItems.Add(pair, a.Amount * amount);
                    }
                });

                if (productItems.ContainsKey(p))
                {
                    productItems[p] += amount;
                }
                else
                {
                    productItems.Add(p, amount);
                }
            }

            dataGridView2.Rows.Clear();
            dataGridView2.Refresh();

            foreach (MaterialUnitPair m in materialItems.Keys) {
                dataGridView2.Rows.Add(m.MaterialType, materialItems[m], m.Unit);
            }
        }
        public override void init(bool firstRun = true)
        {
            Status = "Připojování k databázi...";
            connector = Authorization.login(AppSettings.Nick, AppSettings.Password);
            connector.onError = new Action(()=>connectorErrorHandler(connector));
            SQL = new MySQLDriver(connector);
            Units = new Units(SQL);
            Auth = new Authorization(SQL);
            MaterialTypes = new MaterialTypes(SQL);
            Compositions = new Compositions(SQL);
            Status = "Inicializace...";

            if (firstRun){}

            initState = true;
            if (!connector.IsConnected())
            {
                handleError();
                return;
            }
            reload();
            refresh();
        }